@klevar/portal-cli 0.1.7 → 0.1.8

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/README.md CHANGED
@@ -41,8 +41,11 @@ npx @klevar/portal-cli clients create --name "Stefan" --email "stefan@example.de
41
41
  npx @klevar/portal-cli projects create <clientId> --name "Idealo" --externalRef "idealo:ksh.de"
42
42
  npx @klevar/portal-cli metrics push --external_ref "idealo:ksh.de" --source_ref "run:33" --snapshot_date "2026-04-12" --metrics '{"score":88}'
43
43
  npx @klevar/portal-cli portal me --portal-token "<client-token>"
44
+ npx @klevar/portal-cli portal tasks <projectId> --portal-token "<client-token>"
44
45
  ```
45
46
 
47
+ `portal my-tasks` lists requests submitted by the client across projects. `portal tasks <projectId>` lists the tasks shown on that project detail page, including admin-created project tasks that are visible in the client portal.
48
+
46
49
  ## Capacity And Usage
47
50
 
48
51
  Capacity commands manage included allowances for a project or client. They are not timesheets.
@@ -614,6 +614,12 @@ export declare const COMMAND_GROUPS: {
614
614
  auth: "portalToken";
615
615
  description: string;
616
616
  };
617
+ 'portal.tasks': {
618
+ method: "GET";
619
+ path: string;
620
+ auth: "portalToken";
621
+ description: string;
622
+ };
617
623
  'portal.tasks.create': {
618
624
  method: "POST";
619
625
  path: string;
@@ -61,6 +61,12 @@ export declare const portalCommands: {
61
61
  auth: "portalToken";
62
62
  description: string;
63
63
  };
64
+ 'portal.tasks': {
65
+ method: "GET";
66
+ path: string;
67
+ auth: "portalToken";
68
+ description: string;
69
+ };
64
70
  'portal.tasks.create': {
65
71
  method: "POST";
66
72
  path: string;
@@ -9,6 +9,7 @@ export const portalCommands = {
9
9
  'portal.comments.create': { method: 'POST', path: '/api/portal/projects/:id/updates/:updateId/comments', auth: 'portalToken', description: 'Create portal update comment', body: ['content'] },
10
10
  'portal.search': { method: 'GET', path: '/api/portal/search', auth: 'portalToken', description: 'Search portal content', queryParams: ['q'] },
11
11
  'portal.my-tasks': { method: 'GET', path: '/api/portal/tasks/mine', auth: 'portalToken', description: 'List my portal tasks' },
12
+ 'portal.tasks': { method: 'GET', path: '/api/portal/projects/:id/tasks', auth: 'portalToken', description: 'List portal project tasks' },
12
13
  'portal.tasks.create': { method: 'POST', path: '/api/portal/projects/:id/tasks', auth: 'portalToken', description: 'Create portal task', body: ['title', 'description', 'priority'] },
13
14
  'portal.tasks.delete': { method: 'DELETE', path: '/api/portal/projects/:id/tasks/:taskId', auth: 'portalToken', description: 'Delete portal task' },
14
15
  'portal.tasks.list': { method: 'GET', path: '/api/portal/projects/:id/tasks', auth: 'portalToken', description: 'List portal tasks' },
@@ -1 +1 @@
1
- {"version":3,"file":"portal.js","sourceRoot":"","sources":["../../commands/portal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"portal.js","sourceRoot":"","sources":["../../commands/portal.ts"],"names":[],"mappings":"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"}
@@ -65,6 +65,7 @@ let PORTAL_TOKEN =
65
65
  process.env.PORTAL_PORTAL_TOKEN ||
66
66
  envFile.PORTAL_TOKEN ||
67
67
  envFile.PORTAL_PORTAL_TOKEN;
68
+ let OUTPUT_JSON = false;
68
69
 
69
70
  function requireApiKey() {
70
71
  if (!API_KEY) {
@@ -309,6 +310,10 @@ function helpFlag(commandKey, field) {
309
310
  // ── Output Formatting ───────────────────────────────────────────
310
311
 
311
312
  function formatOutput(data, commandKey) {
313
+ if (OUTPUT_JSON) {
314
+ console.log(JSON.stringify(data, null, 2));
315
+ return;
316
+ }
312
317
  if (!data) { console.log('Done.'); return; }
313
318
 
314
319
  // Special formatting for known responses
@@ -580,7 +585,16 @@ function formatOutput(data, commandKey) {
580
585
  // Create responses — formatted instead of raw JSON
581
586
  if (data.client) {
582
587
  const c = data.client;
583
- console.log(`Client created: ${c.name} [${c.status}] [${c.id}]`);
588
+ if (commandKey === 'clients.go-live') {
589
+ console.log(`Client go-live completed: ${c.name} [${c.status}] [${c.id}]`);
590
+ console.log(' Client notifications enabled.');
591
+ } else if (commandKey === 'clients.mute') {
592
+ console.log(`Client notifications muted: ${c.name} [${c.status}] [${c.id}]`);
593
+ } else if (commandKey === 'clients.update') {
594
+ console.log(`Client updated: ${c.name} [${c.status}] [${c.id}]`);
595
+ } else {
596
+ console.log(`Client created: ${c.name} [${c.status}] [${c.id}]`);
597
+ }
584
598
  if (c.portalSlug) console.log(` Portal: /c/${c.portalSlug}?token=${c.portalToken}`);
585
599
  return;
586
600
  }
@@ -672,7 +686,7 @@ if (!resource || resource === 'help' || resource === '--help') {
672
686
  // Resolve command key — handle single-word commands (e.g. "search <term>")
673
687
  let commandKey = action ? `${resource}.${action}` : resource;
674
688
  let cmd = COMMANDS[commandKey];
675
- if (!cmd && action && rest[0]) {
689
+ if (action && rest[0]) {
676
690
  const nestedKey = `${resource}.${action}.${rest[0]}`;
677
691
  if (COMMANDS[nestedKey]) {
678
692
  commandKey = nestedKey;
@@ -701,6 +715,7 @@ if (flags['portal-token']) process.env.PORTAL_TOKEN = flags['portal-token'];
701
715
  if (flags['api-url']) BASE_URL = flags['api-url'];
702
716
  if (flags['api-key']) API_KEY = flags['api-key'];
703
717
  if (flags['portal-token']) PORTAL_TOKEN = flags['portal-token'];
718
+ OUTPUT_JSON = flags.json === 'true';
704
719
  const id = positional[0];
705
720
 
706
721
  // Interpolate path
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@klevar/portal-cli",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "description": "First-class npm CLI for the Klevar Client Management Portal",
5
5
  "type": "module",
6
6
  "bin": {