@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.
package/dist/index.js CHANGED
@@ -1,48 +1,94 @@
1
1
  import { Command } from 'commander';
2
- import { loadCliConfig } from './config.js';
3
- import { registerTaskCommands } from './commands/task.js';
4
- import { registerBallCommands } from './commands/ball.js';
5
- import { registerMeetingCommands } from './commands/meeting.js';
6
- import { registerReviewCommands } from './commands/review.js';
7
- import { registerMilestoneCommands } from './commands/milestone.js';
8
- import { registerSpaceCommands } from './commands/space.js';
9
- import { registerActivityCommands } from './commands/activity.js';
10
- import { registerClientCommands } from './commands/client.js';
11
- import { registerWikiCommands } from './commands/wiki.js';
12
- import { registerMinutesCommands } from './commands/minutes.js';
13
- import { registerSchedulingCommands } from './commands/scheduling.js';
2
+ import { loadCliConfig, getApiConfig, ConfigError } from './config.js';
14
3
  import { registerConfigCommand } from './commands/config-cmd.js';
4
+ import { registerDynamicCommands } from './dynamic-loader.js';
5
+ import { loadManifest, forceUpdate } from './manifest-cache.js';
6
+ import chalk from 'chalk';
7
+ const CLI_VERSION = '0.2.0';
15
8
  const program = new Command();
16
9
  program
17
10
  .name('agentpm')
18
- .version('0.1.0')
11
+ .version(CLI_VERSION)
19
12
  .description('AgentPM CLI - AI-first task management')
20
13
  .option('--json', 'Output raw JSON')
21
14
  .option('-s, --space-id <uuid>', 'Override default space ID')
22
15
  .option('--api-key <key>', 'Override API key')
23
16
  .hook('preAction', (thisCommand, actionCommand) => {
24
- // Walk up to find the root command name (handles nested subcommands)
17
+ // Walk up to find the root command name
25
18
  let cmd = actionCommand;
26
19
  while (cmd.parent && cmd.parent !== thisCommand) {
27
20
  cmd = cmd.parent;
28
21
  }
29
- // config/login subcommands don't need auth
30
- if (cmd.name() === 'config' || cmd.name() === 'login')
22
+ // config/login/update don't need auth
23
+ const name = cmd.name();
24
+ if (name === 'config' || name === 'login' || name === 'update')
31
25
  return;
32
26
  const opts = thisCommand.opts();
33
- loadCliConfig({ apiKey: opts.apiKey, spaceId: opts.spaceId });
27
+ try {
28
+ loadCliConfig({ apiKey: opts.apiKey, spaceId: opts.spaceId });
29
+ }
30
+ catch (e) {
31
+ if (e instanceof ConfigError) {
32
+ console.error(chalk.red(`Error: ${e.message}`));
33
+ process.exit(1);
34
+ }
35
+ throw e;
36
+ }
34
37
  });
35
- registerTaskCommands(program);
36
- registerBallCommands(program);
37
- registerMeetingCommands(program);
38
- registerReviewCommands(program);
39
- registerMilestoneCommands(program);
40
- registerSpaceCommands(program);
41
- registerActivityCommands(program);
42
- registerClientCommands(program);
43
- registerWikiCommands(program);
44
- registerMinutesCommands(program);
45
- registerSchedulingCommands(program);
38
+ // ── Always-builtin commands (needed before auth) ──
46
39
  registerConfigCommand(program);
47
- program.parseAsync();
40
+ // ── Update command (force-fetch manifest) ──
41
+ program
42
+ .command('update')
43
+ .description('Fetch latest command manifest from server')
44
+ .action(async () => {
45
+ const opts = program.opts();
46
+ loadCliConfig({ apiKey: opts.apiKey, spaceId: opts.spaceId });
47
+ const { apiUrl, apiKey } = getApiConfig();
48
+ try {
49
+ const manifest = await forceUpdate(apiUrl, apiKey);
50
+ console.log(chalk.green(`Updated to manifest v${manifest.version}`));
51
+ console.log(chalk.gray(`${manifest.commands.length} command groups, ` +
52
+ `${manifest.commands.reduce((n, c) => n + (c.subcommands?.length || 1), 0)} commands`));
53
+ }
54
+ catch (e) {
55
+ const msg = e instanceof Error ? e.message : String(e);
56
+ console.error(chalk.red(`Update failed: ${msg}`));
57
+ process.exit(1);
58
+ }
59
+ });
60
+ // ── Dynamic command registration ──
61
+ async function main() {
62
+ // Try to load config for manifest fetch (non-fatal if not configured)
63
+ let apiUrl = '';
64
+ let apiKey;
65
+ try {
66
+ const opts = program.opts();
67
+ // Parse known options without executing actions
68
+ const rawArgs = process.argv.slice(2);
69
+ const apiKeyIdx = rawArgs.indexOf('--api-key');
70
+ const passedApiKey = apiKeyIdx >= 0 ? rawArgs[apiKeyIdx + 1] : undefined;
71
+ loadCliConfig({ apiKey: passedApiKey, spaceId: opts.spaceId });
72
+ const config = getApiConfig();
73
+ apiUrl = config.apiUrl;
74
+ apiKey = config.apiKey;
75
+ }
76
+ catch {
77
+ // Not configured — will use builtin manifest
78
+ }
79
+ if (apiUrl) {
80
+ const manifest = await loadManifest(apiUrl, apiKey, CLI_VERSION);
81
+ registerDynamicCommands(program, manifest);
82
+ }
83
+ else {
84
+ // No config — register builtin for --help to work
85
+ const { BUILTIN_MANIFEST } = await import('./builtin-manifest.js');
86
+ registerDynamicCommands(program, BUILTIN_MANIFEST);
87
+ }
88
+ await program.parseAsync();
89
+ }
90
+ main().catch((e) => {
91
+ console.error(chalk.red(e instanceof Error ? e.message : String(e)));
92
+ process.exit(1);
93
+ });
48
94
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAA;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAA;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CAAC,QAAQ,EAAE,iBAAiB,CAAC;KACnC,MAAM,CAAC,uBAAuB,EAAE,2BAA2B,CAAC;KAC5D,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;KAC7C,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,aAAa,EAAE,EAAE;IAChD,qEAAqE;IACrE,IAAI,GAAG,GAAG,aAAa,CAAA;IACvB,OAAO,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAChD,GAAG,GAAG,GAAG,CAAC,MAAM,CAAA;IAClB,CAAC;IACD,2CAA2C;IAC3C,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,OAAO;QAAE,OAAM;IAE7D,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAA;IAC/B,aAAa,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;AAC/D,CAAC,CAAC,CAAA;AAEJ,oBAAoB,CAAC,OAAO,CAAC,CAAA;AAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAA;AAC7B,uBAAuB,CAAC,OAAO,CAAC,CAAA;AAChC,sBAAsB,CAAC,OAAO,CAAC,CAAA;AAC/B,yBAAyB,CAAC,OAAO,CAAC,CAAA;AAClC,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAC9B,wBAAwB,CAAC,OAAO,CAAC,CAAA;AACjC,sBAAsB,CAAC,OAAO,CAAC,CAAA;AAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAA;AAC7B,uBAAuB,CAAC,OAAO,CAAC,CAAA;AAChC,0BAA0B,CAAC,OAAO,CAAC,CAAA;AACnC,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAE9B,OAAO,CAAC,UAAU,EAAE,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Manifest } from './manifest-validator.js';
2
+ /**
3
+ * Load manifest with 5-level fallback chain:
4
+ * 1. Fresh cache → 2. Server fetch → 3. Expired cache → 4. Prev backup → 5. Builtin
5
+ */
6
+ export declare function loadManifest(apiUrl: string, apiKey?: string, cliVersion?: string): Promise<Manifest>;
7
+ /**
8
+ * Force-fetch latest manifest (for `agentpm update`)
9
+ */
10
+ export declare function forceUpdate(apiUrl: string, apiKey?: string): Promise<Manifest>;
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Manifest cache management with ETag, atomic writes, and fallback chain.
3
+ */
4
+ import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync, } from 'node:fs';
5
+ import { join } from 'node:path';
6
+ import { homedir } from 'node:os';
7
+ import chalk from 'chalk';
8
+ import { validateManifest, satisfiesVersion } from './manifest-validator.js';
9
+ import { BUILTIN_MANIFEST } from './builtin-manifest.js';
10
+ const CACHE_DIR = join(homedir(), '.agentpm');
11
+ const MANIFEST_PATH = join(CACHE_DIR, 'manifest.json');
12
+ const PREV_PATH = join(CACHE_DIR, 'manifest.prev.json');
13
+ const META_PATH = join(CACHE_DIR, 'manifest.meta.json');
14
+ const TTL_MS = 24 * 60 * 60 * 1000; // 24 hours
15
+ // ── Meta helpers ──
16
+ function readMeta() {
17
+ try {
18
+ if (!existsSync(META_PATH))
19
+ return null;
20
+ return JSON.parse(readFileSync(META_PATH, 'utf-8'));
21
+ }
22
+ catch {
23
+ return null;
24
+ }
25
+ }
26
+ function saveMeta(meta) {
27
+ mkdirSync(CACHE_DIR, { recursive: true, mode: 0o700 });
28
+ const tmpPath = `${META_PATH}.${process.pid}.tmp`;
29
+ writeFileSync(tmpPath, JSON.stringify(meta), { mode: 0o600 });
30
+ renameSync(tmpPath, META_PATH);
31
+ }
32
+ function isFresh(meta) {
33
+ const fetchedAt = new Date(meta.fetchedAt).getTime();
34
+ return Date.now() - fetchedAt < TTL_MS;
35
+ }
36
+ // ── Cache read/write ──
37
+ function readAndValidateCache(path) {
38
+ try {
39
+ if (!existsSync(path))
40
+ return null;
41
+ const raw = readFileSync(path, 'utf-8');
42
+ const parsed = JSON.parse(raw);
43
+ return validateManifest(parsed);
44
+ }
45
+ catch {
46
+ return null; // corrupted or validation failed
47
+ }
48
+ }
49
+ function atomicSaveCache(manifest) {
50
+ mkdirSync(CACHE_DIR, { recursive: true, mode: 0o700 });
51
+ const tmpPath = `${MANIFEST_PATH}.${process.pid}.tmp`;
52
+ writeFileSync(tmpPath, JSON.stringify(manifest, null, 2), { mode: 0o600 });
53
+ // Backup current → prev
54
+ try {
55
+ renameSync(MANIFEST_PATH, PREV_PATH);
56
+ }
57
+ catch {
58
+ /* first run — no existing cache */
59
+ }
60
+ // Atomic swap
61
+ renameSync(tmpPath, MANIFEST_PATH);
62
+ }
63
+ // ── Network fetch ──
64
+ async function fetchFromServer(apiUrl, apiKey, etag) {
65
+ const headers = { Accept: 'application/json' };
66
+ if (apiKey)
67
+ headers['Authorization'] = `Bearer ${apiKey}`;
68
+ if (etag)
69
+ headers['If-None-Match'] = etag;
70
+ const url = `${apiUrl.replace(/\/$/, '')}/api/cli/manifest`;
71
+ const res = await fetch(url, { headers, signal: AbortSignal.timeout(10_000) });
72
+ if (res.status === 304) {
73
+ return { etag, notModified: true };
74
+ }
75
+ if (!res.ok) {
76
+ throw new Error(`HTTP ${res.status}`);
77
+ }
78
+ const manifest = await res.json();
79
+ const newEtag = res.headers.get('etag') || undefined;
80
+ return { manifest, etag: newEtag, notModified: false };
81
+ }
82
+ // ── Public API ──
83
+ /**
84
+ * Load manifest with 5-level fallback chain:
85
+ * 1. Fresh cache → 2. Server fetch → 3. Expired cache → 4. Prev backup → 5. Builtin
86
+ */
87
+ export async function loadManifest(apiUrl, apiKey, cliVersion) {
88
+ const meta = readMeta();
89
+ // 1. Fresh cache
90
+ if (meta && isFresh(meta)) {
91
+ const cached = readAndValidateCache(MANIFEST_PATH);
92
+ if (cached) {
93
+ return applyVersionCheck(cached, cliVersion);
94
+ }
95
+ }
96
+ // 2. Server fetch (with ETag for efficiency)
97
+ try {
98
+ const result = await fetchFromServer(apiUrl, apiKey, meta?.etag);
99
+ if (result.notModified && meta) {
100
+ // 304: Just refresh TTL
101
+ saveMeta({ ...meta, fetchedAt: new Date().toISOString() });
102
+ const cached = readAndValidateCache(MANIFEST_PATH);
103
+ if (cached)
104
+ return applyVersionCheck(cached, cliVersion);
105
+ }
106
+ if (result.manifest) {
107
+ const validated = validateManifest(result.manifest);
108
+ atomicSaveCache(validated);
109
+ saveMeta({
110
+ fetchedAt: new Date().toISOString(),
111
+ version: validated.version,
112
+ etag: result.etag,
113
+ });
114
+ return applyVersionCheck(validated, cliVersion);
115
+ }
116
+ }
117
+ catch {
118
+ // Network error — fall through to cached fallbacks
119
+ }
120
+ // 3. Expired cache
121
+ const expired = readAndValidateCache(MANIFEST_PATH);
122
+ if (expired) {
123
+ console.error(chalk.yellow('Warning: Using cached manifest (server unreachable)'));
124
+ return applyVersionCheck(expired, cliVersion);
125
+ }
126
+ // 4. Previous backup
127
+ const prev = readAndValidateCache(PREV_PATH);
128
+ if (prev) {
129
+ console.error(chalk.yellow('Warning: Using previous manifest (cache corrupted)'));
130
+ return applyVersionCheck(prev, cliVersion);
131
+ }
132
+ // 5. Builtin
133
+ console.error(chalk.yellow('Warning: Using builtin commands (no manifest available)'));
134
+ return BUILTIN_MANIFEST;
135
+ }
136
+ /**
137
+ * Force-fetch latest manifest (for `agentpm update`)
138
+ */
139
+ export async function forceUpdate(apiUrl, apiKey) {
140
+ const result = await fetchFromServer(apiUrl, apiKey);
141
+ if (!result.manifest) {
142
+ throw new Error('Server returned no manifest');
143
+ }
144
+ const validated = validateManifest(result.manifest);
145
+ atomicSaveCache(validated);
146
+ saveMeta({
147
+ fetchedAt: new Date().toISOString(),
148
+ version: validated.version,
149
+ etag: result.etag,
150
+ });
151
+ return validated;
152
+ }
153
+ /**
154
+ * Version compatibility check.
155
+ * CLI < minCliVersion → always use builtin (incompatible manifest)
156
+ */
157
+ function applyVersionCheck(manifest, cliVersion) {
158
+ if (!cliVersion)
159
+ return manifest;
160
+ if (!satisfiesVersion(cliVersion, manifest.minCliVersion)) {
161
+ console.error(chalk.yellow(`Warning: CLI v${cliVersion} は古いです。` +
162
+ `npm update -g @uzukko/agentpm でアップデートしてください`));
163
+ return BUILTIN_MANIFEST;
164
+ }
165
+ return manifest;
166
+ }
167
+ //# sourceMappingURL=manifest-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-cache.js","sourceRoot":"","sources":["../src/manifest-cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,UAAU,EACV,SAAS,EACT,YAAY,EACZ,UAAU,EACV,aAAa,GACd,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAGxD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAA;AAC7C,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAA;AACtD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAA;AACvD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAA;AACvD,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA,CAAC,WAAW;AAQ9C,qBAAqB;AAErB,SAAS,QAAQ;IACf,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,IAAI,CAAA;QACvC,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAA;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,IAAe;IAC/B,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IACtD,MAAM,OAAO,GAAG,GAAG,SAAS,IAAI,OAAO,CAAC,GAAG,MAAM,CAAA;IACjD,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IAC7D,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;AAChC,CAAC;AAED,SAAS,OAAO,CAAC,IAAe;IAC9B,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAA;IACpD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,MAAM,CAAA;AACxC,CAAC;AAED,yBAAyB;AAEzB,SAAS,oBAAoB,CAAC,IAAY;IACxC,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAA;QAClC,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC9B,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAA;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA,CAAC,iCAAiC;IAC/C,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,QAAkB;IACzC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IACtD,MAAM,OAAO,GAAG,GAAG,aAAa,IAAI,OAAO,CAAC,GAAG,MAAM,CAAA;IACrD,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IAC1E,wBAAwB;IACxB,IAAI,CAAC;QACH,UAAU,CAAC,aAAa,EAAE,SAAS,CAAC,CAAA;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,mCAAmC;IACrC,CAAC;IACD,cAAc;IACd,UAAU,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;AACpC,CAAC;AAED,sBAAsB;AAEtB,KAAK,UAAU,eAAe,CAC5B,MAAc,EACd,MAAe,EACf,IAAa;IAEb,MAAM,OAAO,GAA2B,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAA;IACtE,IAAI,MAAM;QAAE,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,EAAE,CAAA;IACzD,IAAI,IAAI;QAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI,CAAA;IAEzC,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAA;IAC3D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAE9E,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;IACpC,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;IACvC,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;IACjC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS,CAAA;IACpD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAA;AACxD,CAAC;AAED,mBAAmB;AAEnB;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAc,EACd,MAAe,EACf,UAAmB;IAEnB,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAA;IAEvB,iBAAiB;IACjB,IAAI,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,oBAAoB,CAAC,aAAa,CAAC,CAAA;QAClD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;QAC9C,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;QAEhE,IAAI,MAAM,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC;YAC/B,wBAAwB;YACxB,QAAQ,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;YAC1D,MAAM,MAAM,GAAG,oBAAoB,CAAC,aAAa,CAAC,CAAA;YAClD,IAAI,MAAM;gBAAE,OAAO,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;QAC1D,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACnD,eAAe,CAAC,SAAS,CAAC,CAAA;YAC1B,QAAQ,CAAC;gBACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,OAAO,EAAE,SAAS,CAAC,OAAO;gBAC1B,IAAI,EAAE,MAAM,CAAC,IAAI;aAClB,CAAC,CAAA;YACF,OAAO,iBAAiB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;QACjD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,mDAAmD;IACrD,CAAC;IAED,mBAAmB;IACnB,MAAM,OAAO,GAAG,oBAAoB,CAAC,aAAa,CAAC,CAAA;IACnD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,qDAAqD,CAAC,CAAC,CAAA;QAClF,OAAO,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;IAC/C,CAAC;IAED,qBAAqB;IACrB,MAAM,IAAI,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAA;IAC5C,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,oDAAoD,CAAC,CAAC,CAAA;QACjF,OAAO,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IAC5C,CAAC;IAED,aAAa;IACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,yDAAyD,CAAC,CAAC,CAAA;IACtF,OAAO,gBAAgB,CAAA;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAc,EACd,MAAe;IAEf,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;IAChD,CAAC;IACD,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IACnD,eAAe,CAAC,SAAS,CAAC,CAAA;IAC1B,QAAQ,CAAC;QACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,IAAI,EAAE,MAAM,CAAC,IAAI;KAClB,CAAC,CAAA;IACF,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAC,QAAkB,EAAE,UAAmB;IAChE,IAAI,CAAC,UAAU;QAAE,OAAO,QAAQ,CAAA;IAChC,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1D,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,MAAM,CACV,iBAAiB,UAAU,SAAS;YACpC,6CAA6C,CAC9C,CACF,CAAA;QACD,OAAO,gBAAgB,CAAA;IACzB,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC"}
@@ -0,0 +1,49 @@
1
+ export interface ManifestOption {
2
+ flags: string;
3
+ description?: string;
4
+ param: string;
5
+ required?: boolean;
6
+ default?: string;
7
+ type?: 'int' | 'float' | 'bool' | 'json' | 'string[]' | 'negatable';
8
+ choices?: string[];
9
+ resolve?: 'spaceId';
10
+ dependsOn?: string;
11
+ conflictsWith?: string;
12
+ }
13
+ export interface ManifestSubcommand {
14
+ name: string;
15
+ description: string;
16
+ aliases?: string[];
17
+ tool: string;
18
+ examples?: string[];
19
+ deprecated?: boolean;
20
+ hidden?: boolean;
21
+ stdinMode?: boolean;
22
+ options: ManifestOption[];
23
+ }
24
+ export interface ManifestCommand {
25
+ name: string;
26
+ description: string;
27
+ aliases?: string[];
28
+ tool?: string;
29
+ options?: ManifestOption[];
30
+ subcommands?: ManifestSubcommand[];
31
+ }
32
+ export interface Manifest {
33
+ version: string;
34
+ minCliVersion: string;
35
+ generatedAt: string;
36
+ checksum: string;
37
+ commands: ManifestCommand[];
38
+ }
39
+ /** Strip ANSI escape sequences and control characters */
40
+ export declare function sanitize(str: string): string;
41
+ /**
42
+ * Validate a parsed manifest object.
43
+ * Returns the typed manifest or throws ManifestValidationError.
44
+ */
45
+ export declare function validateManifest(raw: unknown): Manifest;
46
+ /**
47
+ * Compare semver strings: returns true if current >= required
48
+ */
49
+ export declare function satisfiesVersion(current: string, required: string): boolean;
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Manifest schema validation + checksum verification
3
+ */
4
+ import { createHash } from 'node:crypto';
5
+ // Validation regex patterns
6
+ const NAME_RE = /^[a-z][a-z0-9-]*$/;
7
+ const PARAM_RE = /^[a-zA-Z][a-zA-Z0-9]*$/;
8
+ const TOOL_RE = /^[a-z][a-z_]*$/;
9
+ const FLAGS_RE = /^(-[a-zA-Z],\s)?--[a-z][a-z0-9-]*(\s<[^>]+>)?$/;
10
+ /** Strip ANSI escape sequences and control characters */
11
+ export function sanitize(str) {
12
+ // eslint-disable-next-line no-control-regex
13
+ return str.replace(/[\x00-\x1f\x7f]|\x1b\[[0-9;]*[a-zA-Z]/g, '');
14
+ }
15
+ class ManifestValidationError extends Error {
16
+ constructor(message) {
17
+ super(message);
18
+ this.name = 'ManifestValidationError';
19
+ }
20
+ }
21
+ function validateOption(opt, path) {
22
+ if (!opt.flags || typeof opt.flags !== 'string') {
23
+ throw new ManifestValidationError(`${path}: missing flags`);
24
+ }
25
+ // Allow --no-xxx negatable flags
26
+ const flagsToCheck = opt.type === 'negatable' ? opt.flags.replace('--no-', '--') : opt.flags;
27
+ if (!FLAGS_RE.test(flagsToCheck)) {
28
+ throw new ManifestValidationError(`${path}: invalid flags format: ${opt.flags}`);
29
+ }
30
+ if (!opt.param || !PARAM_RE.test(opt.param)) {
31
+ throw new ManifestValidationError(`${path}: invalid param: ${opt.param}`);
32
+ }
33
+ if (opt.type && !['int', 'float', 'bool', 'json', 'string[]', 'negatable'].includes(opt.type)) {
34
+ throw new ManifestValidationError(`${path}: invalid type: ${opt.type}`);
35
+ }
36
+ }
37
+ function validateSubcommand(sub, path) {
38
+ if (!sub.name || !NAME_RE.test(sub.name)) {
39
+ throw new ManifestValidationError(`${path}: invalid name: ${sub.name}`);
40
+ }
41
+ if (!sub.tool || !TOOL_RE.test(sub.tool)) {
42
+ throw new ManifestValidationError(`${path}: invalid tool: ${sub.tool}`);
43
+ }
44
+ if (!sub.description || typeof sub.description !== 'string') {
45
+ throw new ManifestValidationError(`${path}: missing description`);
46
+ }
47
+ if (!Array.isArray(sub.options)) {
48
+ throw new ManifestValidationError(`${path}: options must be an array`);
49
+ }
50
+ for (let i = 0; i < sub.options.length; i++) {
51
+ validateOption(sub.options[i], `${path}.options[${i}]`);
52
+ }
53
+ }
54
+ function validateCommand(cmd, path) {
55
+ if (!cmd.name || !NAME_RE.test(cmd.name)) {
56
+ throw new ManifestValidationError(`${path}: invalid name: ${cmd.name}`);
57
+ }
58
+ if (!cmd.description || typeof cmd.description !== 'string') {
59
+ throw new ManifestValidationError(`${path}: missing description`);
60
+ }
61
+ // Top-level command with direct tool (e.g., dashboard)
62
+ if (cmd.tool) {
63
+ if (!TOOL_RE.test(cmd.tool)) {
64
+ throw new ManifestValidationError(`${path}: invalid tool: ${cmd.tool}`);
65
+ }
66
+ if (cmd.options) {
67
+ for (let i = 0; i < cmd.options.length; i++) {
68
+ validateOption(cmd.options[i], `${path}.options[${i}]`);
69
+ }
70
+ }
71
+ }
72
+ // Command with subcommands
73
+ if (cmd.subcommands) {
74
+ if (!Array.isArray(cmd.subcommands)) {
75
+ throw new ManifestValidationError(`${path}: subcommands must be an array`);
76
+ }
77
+ for (let i = 0; i < cmd.subcommands.length; i++) {
78
+ validateSubcommand(cmd.subcommands[i], `${path}.subcommands[${i}]`);
79
+ }
80
+ }
81
+ if (!cmd.tool && !cmd.subcommands) {
82
+ throw new ManifestValidationError(`${path}: must have either tool or subcommands`);
83
+ }
84
+ }
85
+ function verifyChecksum(manifest) {
86
+ const expected = manifest.checksum;
87
+ if (!expected || !expected.startsWith('sha256:'))
88
+ return false;
89
+ const computed = createHash('sha256').update(JSON.stringify(manifest.commands)).digest('hex');
90
+ return expected === `sha256:${computed}`;
91
+ }
92
+ /**
93
+ * Validate a parsed manifest object.
94
+ * Returns the typed manifest or throws ManifestValidationError.
95
+ */
96
+ export function validateManifest(raw) {
97
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
98
+ throw new ManifestValidationError('Manifest must be a JSON object');
99
+ }
100
+ const m = raw;
101
+ if (typeof m.version !== 'string') {
102
+ throw new ManifestValidationError('Missing version');
103
+ }
104
+ if (typeof m.minCliVersion !== 'string') {
105
+ throw new ManifestValidationError('Missing minCliVersion');
106
+ }
107
+ if (!Array.isArray(m.commands)) {
108
+ throw new ManifestValidationError('Missing commands array');
109
+ }
110
+ const manifest = raw;
111
+ // Checksum verification (corruption detection)
112
+ // Empty checksum is allowed for builtin manifest only (version '0.0.0-builtin')
113
+ if (manifest.checksum) {
114
+ if (!verifyChecksum(manifest)) {
115
+ throw new ManifestValidationError('Checksum mismatch — manifest may be corrupted');
116
+ }
117
+ }
118
+ else if (manifest.version !== '0.0.0-builtin') {
119
+ throw new ManifestValidationError('Missing checksum — manifest integrity cannot be verified');
120
+ }
121
+ // Validate each command
122
+ for (let i = 0; i < manifest.commands.length; i++) {
123
+ validateCommand(manifest.commands[i], `commands[${i}]`);
124
+ }
125
+ // Sanitize display strings
126
+ for (const cmd of manifest.commands) {
127
+ cmd.description = sanitize(cmd.description);
128
+ if (cmd.subcommands) {
129
+ for (const sub of cmd.subcommands) {
130
+ sub.description = sanitize(sub.description);
131
+ if (sub.examples) {
132
+ sub.examples = sub.examples.map(sanitize);
133
+ }
134
+ for (const opt of sub.options) {
135
+ if (opt.description)
136
+ opt.description = sanitize(opt.description);
137
+ }
138
+ }
139
+ }
140
+ if (cmd.options) {
141
+ for (const opt of cmd.options) {
142
+ if (opt.description)
143
+ opt.description = sanitize(opt.description);
144
+ }
145
+ }
146
+ }
147
+ return manifest;
148
+ }
149
+ /**
150
+ * Compare semver strings: returns true if current >= required
151
+ */
152
+ export function satisfiesVersion(current, required) {
153
+ const parse = (v) => v.split('.').map(Number);
154
+ const [cMaj, cMin = 0, cPat = 0] = parse(current);
155
+ const [rMaj, rMin = 0, rPat = 0] = parse(required);
156
+ if (cMaj !== rMaj)
157
+ return cMaj > rMaj;
158
+ if (cMin !== rMin)
159
+ return cMin > rMin;
160
+ return cPat >= rPat;
161
+ }
162
+ //# sourceMappingURL=manifest-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-validator.js","sourceRoot":"","sources":["../src/manifest-validator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uzukko/agentpm",
3
- "version": "0.1.2",
3
+ "version": "0.2.0",
4
4
  "description": "CLI for TaskApp - AI-first task management",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",