@kb-labs/steward-entry 0.1.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 (90) hide show
  1. package/README.md +5 -0
  2. package/dist/commands/commitment-add.d.ts +15 -0
  3. package/dist/commands/commitment-add.js +53 -0
  4. package/dist/commands/commitment-add.js.map +1 -0
  5. package/dist/commands/commitment-done.d.ts +10 -0
  6. package/dist/commands/commitment-done.js +43 -0
  7. package/dist/commands/commitment-done.js.map +1 -0
  8. package/dist/commands/commitment-drop.d.ts +11 -0
  9. package/dist/commands/commitment-drop.js +43 -0
  10. package/dist/commands/commitment-drop.js.map +1 -0
  11. package/dist/commands/commitment-list.d.ts +13 -0
  12. package/dist/commands/commitment-list.js +37 -0
  13. package/dist/commands/commitment-list.js.map +1 -0
  14. package/dist/commands/commitment-snooze.d.ts +12 -0
  15. package/dist/commands/commitment-snooze.js +54 -0
  16. package/dist/commands/commitment-snooze.js.map +1 -0
  17. package/dist/commands/company-add.d.ts +11 -0
  18. package/dist/commands/company-add.js +34 -0
  19. package/dist/commands/company-add.js.map +1 -0
  20. package/dist/commands/company-list.d.ts +10 -0
  21. package/dist/commands/company-list.js +32 -0
  22. package/dist/commands/company-list.js.map +1 -0
  23. package/dist/commands/event-add.d.ts +14 -0
  24. package/dist/commands/event-add.js +46 -0
  25. package/dist/commands/event-add.js.map +1 -0
  26. package/dist/commands/event-list.d.ts +13 -0
  27. package/dist/commands/event-list.js +38 -0
  28. package/dist/commands/event-list.js.map +1 -0
  29. package/dist/commands/member-add.d.ts +15 -0
  30. package/dist/commands/member-add.js +50 -0
  31. package/dist/commands/member-add.js.map +1 -0
  32. package/dist/commands/member-list.d.ts +10 -0
  33. package/dist/commands/member-list.js +37 -0
  34. package/dist/commands/member-list.js.map +1 -0
  35. package/dist/commands/person-add.d.ts +16 -0
  36. package/dist/commands/person-add.js +52 -0
  37. package/dist/commands/person-add.js.map +1 -0
  38. package/dist/commands/person-get.d.ts +10 -0
  39. package/dist/commands/person-get.js +43 -0
  40. package/dist/commands/person-get.js.map +1 -0
  41. package/dist/commands/person-list.d.ts +10 -0
  42. package/dist/commands/person-list.js +32 -0
  43. package/dist/commands/person-list.js.map +1 -0
  44. package/dist/commands/person-update.d.ts +13 -0
  45. package/dist/commands/person-update.js +53 -0
  46. package/dist/commands/person-update.js.map +1 -0
  47. package/dist/commands/project-add.d.ts +13 -0
  48. package/dist/commands/project-add.js +38 -0
  49. package/dist/commands/project-add.js.map +1 -0
  50. package/dist/commands/project-get.d.ts +10 -0
  51. package/dist/commands/project-get.js +43 -0
  52. package/dist/commands/project-get.js.map +1 -0
  53. package/dist/commands/project-list.d.ts +11 -0
  54. package/dist/commands/project-list.js +34 -0
  55. package/dist/commands/project-list.js.map +1 -0
  56. package/dist/commands/project-update.d.ts +12 -0
  57. package/dist/commands/project-update.js +47 -0
  58. package/dist/commands/project-update.js.map +1 -0
  59. package/dist/commands/resource-add.d.ts +14 -0
  60. package/dist/commands/resource-add.js +44 -0
  61. package/dist/commands/resource-add.js.map +1 -0
  62. package/dist/commands/resource-list.d.ts +10 -0
  63. package/dist/commands/resource-list.js +37 -0
  64. package/dist/commands/resource-list.js.map +1 -0
  65. package/dist/commands/review.d.ts +10 -0
  66. package/dist/commands/review.js +35 -0
  67. package/dist/commands/review.js.map +1 -0
  68. package/dist/commands/topic-add.d.ts +12 -0
  69. package/dist/commands/topic-add.js +44 -0
  70. package/dist/commands/topic-add.js.map +1 -0
  71. package/dist/commands/topic-list.d.ts +10 -0
  72. package/dist/commands/topic-list.js +32 -0
  73. package/dist/commands/topic-list.js.map +1 -0
  74. package/dist/commands/who.d.ts +11 -0
  75. package/dist/commands/who.js +42 -0
  76. package/dist/commands/who.js.map +1 -0
  77. package/dist/index.d.ts +2 -0
  78. package/dist/index.js +406 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/jobs/daily-review.d.ts +11 -0
  81. package/dist/jobs/daily-review.js +47 -0
  82. package/dist/jobs/daily-review.js.map +1 -0
  83. package/dist/jobs/export-backup.d.ts +13 -0
  84. package/dist/jobs/export-backup.js +32 -0
  85. package/dist/jobs/export-backup.js.map +1 -0
  86. package/dist/manifest.d.ts +490 -0
  87. package/dist/manifest.js +406 -0
  88. package/dist/manifest.js.map +1 -0
  89. package/dist/manifest.json +728 -0
  90. package/package.json +55 -0
@@ -0,0 +1,50 @@
1
+ import { defineCommand, validationError, handleError } from '@kb-labs/sdk';
2
+ import { addMember } from '@kb-labs/steward-core';
3
+
4
+ // src/commands/member-add.ts
5
+
6
+ // src/utils/flags.ts
7
+ function parseList(csv) {
8
+ if (csv === void 0) {
9
+ return void 0;
10
+ }
11
+ return csv.split(",").map((s) => s.trim()).filter(Boolean);
12
+ }
13
+
14
+ // src/commands/member-add.ts
15
+ var member_add_default = defineCommand({
16
+ id: "steward:member.add",
17
+ description: "Link a person to a project with a role and fallback priority",
18
+ handler: {
19
+ async execute(ctx, input) {
20
+ const { person, project, role, topics, priority, json } = input.flags;
21
+ if (!person || !project || !role?.trim()) {
22
+ validationError(ctx, "--person, --project, and --role are required", void 0, json);
23
+ return { ok: false, error: "INVALID_ARGS", result: null };
24
+ }
25
+ try {
26
+ const member = await addMember({
27
+ personId: person,
28
+ projectId: project,
29
+ role,
30
+ topics: parseList(topics),
31
+ priority: priority !== void 0 ? Number(priority) : 0
32
+ });
33
+ if (json) {
34
+ ctx.ui?.json?.({ ok: true, result: member });
35
+ } else {
36
+ ctx.ui?.info?.(`Linked ${person} to ${project} as "${role}" (priority ${member.priority})`);
37
+ }
38
+ return { ok: true, result: member };
39
+ } catch (err) {
40
+ ctx.platform.logger?.error?.("steward:member.add failed", err instanceof Error ? err : new Error(String(err)));
41
+ handleError(ctx, err, json);
42
+ return { ok: false, error: err instanceof Error ? err.message : String(err), result: null };
43
+ }
44
+ }
45
+ }
46
+ });
47
+
48
+ export { member_add_default as default };
49
+ //# sourceMappingURL=member-add.js.map
50
+ //# sourceMappingURL=member-add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/flags.ts","../../src/commands/member-add.ts"],"names":[],"mappings":";;;;;;AACO,SAAS,UAAU,GAAA,EAAoC;AAC5D,EAAA,IAAI,QAAQ,MAAA,EAAW;AAAC,IAAA,OAAO,MAAA;AAAA,EAAU;AACzC,EAAA,OAAO,GAAA,CACJ,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA,CACnB,MAAA,CAAO,OAAO,CAAA;AACnB;;;ACDA,IAAO,qBAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,oBAAA;AAAA,EACJ,WAAA,EAAa,8DAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAwB;AAC1D,MAAA,MAAM,EAAE,QAAQ,OAAA,EAAS,IAAA,EAAM,QAAQ,QAAA,EAAU,IAAA,KAAS,KAAA,CAAM,KAAA;AAChE,MAAA,IAAI,CAAC,MAAA,IAAU,CAAC,WAAW,CAAC,IAAA,EAAM,MAAK,EAAG;AACxC,QAAA,eAAA,CAAgB,GAAA,EAAK,8CAAA,EAAgD,MAAA,EAAW,IAAI,CAAA;AACpF,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,QAAQ,IAAA,EAAK;AAAA,MAC1D;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU;AAAA,UAC7B,QAAA,EAAU,MAAA;AAAA,UACV,SAAA,EAAW,OAAA;AAAA,UACX,IAAA;AAAA,UACA,MAAA,EAAQ,UAAU,MAAM,CAAA;AAAA,UACxB,QAAA,EAAU,QAAA,KAAa,KAAA,CAAA,GAAY,MAAA,CAAO,QAAQ,CAAA,GAAI;AAAA,SACvD,CAAA;AACD,QAAA,IAAI,IAAA,EAAM;AAAC,UAAA,GAAA,CAAI,IAAI,IAAA,GAAO,EAAE,IAAI,IAAA,EAAM,MAAA,EAAQ,QAAQ,CAAA;AAAA,QAAE,CAAA,MACnD;AAAC,UAAA,GAAA,CAAI,EAAA,EAAI,IAAA,GAAO,CAAA,OAAA,EAAU,MAAM,CAAA,IAAA,EAAO,OAAO,CAAA,KAAA,EAAQ,IAAI,CAAA,YAAA,EAAe,MAAA,CAAO,QAAQ,CAAA,CAAA,CAAG,CAAA;AAAA,QAAE;AAClG,QAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAO;AAAA,MACpC,SAAS,GAAA,EAAK;AACZ,QAAA,GAAA,CAAI,QAAA,CAAS,MAAA,EAAQ,KAAA,GAAQ,2BAAA,EAA6B,GAAA,YAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAC,CAAA;AAC7G,QAAA,WAAA,CAAY,GAAA,EAAK,KAAK,IAAI,CAAA;AAC1B,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAA,EAAG,MAAA,EAAQ,IAAA,EAAK;AAAA,MAC5F;AAAA,IACF;AAAA;AAEJ,CAAC","file":"member-add.js","sourcesContent":["/** Parses a `--flag=a,b,c` value into a trimmed string list. */\nexport function parseList(csv?: string): string[] | undefined {\n if (csv === undefined) {return undefined;}\n return csv\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n}\n\n/** Parses an ISO date/time flag into epoch milliseconds. Throws on garbage input. */\nexport function parseDate(value: string): number {\n const ms = Date.parse(value);\n if (Number.isNaN(ms)) {\n throw new Error(`Invalid date: \"${value}\" — expected ISO 8601 (e.g. 2026-09-01)`);\n }\n return ms;\n}\n","import { defineCommand, handleError, validationError, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { addMember } from '@kb-labs/steward-core';\nimport { parseList } from '../utils/flags.js';\n\ntype Flags = { person?: string; project?: string; role?: string; topics?: string; priority?: number; json?: boolean };\n\nexport default defineCommand({\n id: 'steward:member.add',\n description: 'Link a person to a project with a role and fallback priority',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<Flags>) {\n const { person, project, role, topics, priority, json } = input.flags;\n if (!person || !project || !role?.trim()) {\n validationError(ctx, '--person, --project, and --role are required', undefined, json);\n return { ok: false, error: 'INVALID_ARGS', result: null };\n }\n\n try {\n const member = await addMember({\n personId: person,\n projectId: project,\n role,\n topics: parseList(topics),\n priority: priority !== undefined ? Number(priority) : 0,\n });\n if (json) {ctx.ui?.json?.({ ok: true, result: member });}\n else {ctx.ui?.info?.(`Linked ${person} to ${project} as \"${role}\" (priority ${member.priority})`);}\n return { ok: true, result: member };\n } catch (err) {\n ctx.platform.logger?.error?.('steward:member.add failed', err instanceof Error ? err : new Error(String(err)));\n handleError(ctx, err, json);\n return { ok: false, error: err instanceof Error ? err.message : String(err), result: null };\n }\n },\n },\n});\n"]}
@@ -0,0 +1,10 @@
1
+ import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import * as _kb_labs_steward_contracts from '@kb-labs/steward-contracts';
3
+ import { CLIInput } from '@kb-labs/sdk';
4
+
5
+ type Flags = {
6
+ json?: boolean;
7
+ };
8
+ declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<Flags>, _kb_labs_steward_contracts.ProjectMember[]>;
9
+
10
+ export { _default as default };
@@ -0,0 +1,37 @@
1
+ import { defineCommand, validationError, handleError } from '@kb-labs/sdk';
2
+ import { listMembers } from '@kb-labs/steward-core';
3
+
4
+ // src/commands/member-list.ts
5
+ var member_list_default = defineCommand({
6
+ id: "steward:member.list",
7
+ description: "List members of a project, ordered by fallback priority",
8
+ handler: {
9
+ async execute(ctx, input) {
10
+ const [projectId] = input.argv;
11
+ const { json } = input.flags;
12
+ if (!projectId) {
13
+ validationError(ctx, "projectId is required", "Usage: kb steward member list <projectId>", json);
14
+ return { ok: false, error: "INVALID_ARGS", result: null };
15
+ }
16
+ try {
17
+ const members = await listMembers(projectId);
18
+ if (json) {
19
+ ctx.ui?.json?.({ ok: true, result: members });
20
+ } else if (members.length === 0) {
21
+ ctx.ui?.info?.("No members yet.");
22
+ } else {
23
+ ctx.ui?.chain?.(members.map((m) => ({ title: `${m.role} (priority ${m.priority})`, sections: [{ items: [m.personId] }] })));
24
+ }
25
+ return { ok: true, result: members };
26
+ } catch (err) {
27
+ ctx.platform.logger?.error?.("steward:member.list failed", err instanceof Error ? err : new Error(String(err)));
28
+ handleError(ctx, err, json);
29
+ return { ok: false, error: err instanceof Error ? err.message : String(err), result: null };
30
+ }
31
+ }
32
+ }
33
+ });
34
+
35
+ export { member_list_default as default };
36
+ //# sourceMappingURL=member-list.js.map
37
+ //# sourceMappingURL=member-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/commands/member-list.ts"],"names":[],"mappings":";;;;AAKA,IAAO,sBAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,qBAAA;AAAA,EACJ,WAAA,EAAa,yDAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAwB;AAC1D,MAAA,MAAM,CAAC,SAAS,CAAA,GAAI,KAAA,CAAM,IAAA;AAC1B,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,KAAA,CAAM,KAAA;AACvB,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,eAAA,CAAgB,GAAA,EAAK,uBAAA,EAAyB,2CAAA,EAA6C,IAAI,CAAA;AAC/F,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,QAAQ,IAAA,EAAK;AAAA,MAC1D;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,GAAU,MAAM,WAAA,CAAY,SAAS,CAAA;AAC3C,QAAA,IAAI,IAAA,EAAM;AAAC,UAAA,GAAA,CAAI,IAAI,IAAA,GAAO,EAAE,IAAI,IAAA,EAAM,MAAA,EAAQ,SAAS,CAAA;AAAA,QAAE,CAAA,MAAA,IAChD,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG;AAAC,UAAA,GAAA,CAAI,EAAA,EAAI,OAAO,iBAAiB,CAAA;AAAA,QAAE,CAAA,MAC7D;AAAC,UAAA,GAAA,CAAI,EAAA,EAAI,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,WAAA,EAAc,CAAA,CAAE,QAAQ,CAAA,CAAA,CAAA,EAAK,QAAA,EAAU,CAAC,EAAE,KAAA,EAAO,CAAC,CAAA,CAAE,QAAQ,CAAA,EAAG,CAAA,EAAE,CAAE,CAAC,CAAA;AAAA,QAAE;AAClI,QAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAQ;AAAA,MACrC,SAAS,GAAA,EAAK;AACZ,QAAA,GAAA,CAAI,QAAA,CAAS,MAAA,EAAQ,KAAA,GAAQ,4BAAA,EAA8B,GAAA,YAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAC,CAAA;AAC9G,QAAA,WAAA,CAAY,GAAA,EAAK,KAAK,IAAI,CAAA;AAC1B,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAA,EAAG,MAAA,EAAQ,IAAA,EAAK;AAAA,MAC5F;AAAA,IACF;AAAA;AAEJ,CAAC","file":"member-list.js","sourcesContent":["import { defineCommand, handleError, validationError, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { listMembers } from '@kb-labs/steward-core';\n\ntype Flags = { json?: boolean };\n\nexport default defineCommand({\n id: 'steward:member.list',\n description: 'List members of a project, ordered by fallback priority',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<Flags>) {\n const [projectId] = input.argv;\n const { json } = input.flags;\n if (!projectId) {\n validationError(ctx, 'projectId is required', 'Usage: kb steward member list <projectId>', json);\n return { ok: false, error: 'INVALID_ARGS', result: null };\n }\n\n try {\n const members = await listMembers(projectId);\n if (json) {ctx.ui?.json?.({ ok: true, result: members });}\n else if (members.length === 0) {ctx.ui?.info?.('No members yet.');}\n else {ctx.ui?.chain?.(members.map((m) => ({ title: `${m.role} (priority ${m.priority})`, sections: [{ items: [m.personId] }] })));}\n return { ok: true, result: members };\n } catch (err) {\n ctx.platform.logger?.error?.('steward:member.list failed', err instanceof Error ? err : new Error(String(err)));\n handleError(ctx, err, json);\n return { ok: false, error: err instanceof Error ? err.message : String(err), result: null };\n }\n },\n },\n});\n"]}
@@ -0,0 +1,16 @@
1
+ import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import * as _kb_labs_steward_contracts from '@kb-labs/steward-contracts';
3
+ import { CLIInput } from '@kb-labs/sdk';
4
+
5
+ type Flags = {
6
+ name?: string;
7
+ topics?: string;
8
+ company?: string;
9
+ json?: boolean;
10
+ };
11
+ declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<Flags>, {
12
+ person: _kb_labs_steward_contracts.Person;
13
+ possibleDuplicates: _kb_labs_steward_contracts.Person[];
14
+ }>;
15
+
16
+ export { _default as default };
@@ -0,0 +1,52 @@
1
+ import { defineCommand, validationError, handleError } from '@kb-labs/sdk';
2
+ import { addPerson } from '@kb-labs/steward-core';
3
+
4
+ // src/commands/person-add.ts
5
+
6
+ // src/utils/flags.ts
7
+ function parseList(csv) {
8
+ if (csv === void 0) {
9
+ return void 0;
10
+ }
11
+ return csv.split(",").map((s) => s.trim()).filter(Boolean);
12
+ }
13
+
14
+ // src/commands/person-add.ts
15
+ var person_add_default = defineCommand({
16
+ id: "steward:person.add",
17
+ description: "Add a contact. Returns a possibleDuplicates warning, not an error, on a name match",
18
+ handler: {
19
+ async execute(ctx, input) {
20
+ const { name, topics, company, json } = input.flags;
21
+ if (!name?.trim()) {
22
+ validationError(ctx, "--name is required", void 0, json);
23
+ return { ok: false, error: "INVALID_ARGS", result: null };
24
+ }
25
+ try {
26
+ const { person, possibleDuplicates } = await addPerson({
27
+ name,
28
+ contacts: [],
29
+ companyId: company,
30
+ globalTopics: parseList(topics) ?? []
31
+ });
32
+ if (json) {
33
+ ctx.ui?.json?.({ ok: true, result: { person, possibleDuplicates } });
34
+ } else {
35
+ ctx.ui?.info?.(`Added "${person.name}" (${person.id})`);
36
+ if (possibleDuplicates.length > 0) {
37
+ ctx.ui?.warn?.(`Possible duplicate${possibleDuplicates.length > 1 ? "s" : ""}: ${possibleDuplicates.map((p) => p.id).join(", ")}`);
38
+ }
39
+ }
40
+ return { ok: true, result: { person, possibleDuplicates } };
41
+ } catch (err) {
42
+ ctx.platform.logger?.error?.("steward:person.add failed", err instanceof Error ? err : new Error(String(err)));
43
+ handleError(ctx, err, json);
44
+ return { ok: false, error: err instanceof Error ? err.message : String(err), result: null };
45
+ }
46
+ }
47
+ }
48
+ });
49
+
50
+ export { person_add_default as default };
51
+ //# sourceMappingURL=person-add.js.map
52
+ //# sourceMappingURL=person-add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/flags.ts","../../src/commands/person-add.ts"],"names":[],"mappings":";;;;;;AACO,SAAS,UAAU,GAAA,EAAoC;AAC5D,EAAA,IAAI,QAAQ,MAAA,EAAW;AAAC,IAAA,OAAO,MAAA;AAAA,EAAU;AACzC,EAAA,OAAO,GAAA,CACJ,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA,CACnB,MAAA,CAAO,OAAO,CAAA;AACnB;;;ACDA,IAAO,qBAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,oBAAA;AAAA,EACJ,WAAA,EAAa,oFAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAwB;AAC1D,MAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,IAAA,KAAS,KAAA,CAAM,KAAA;AAC9C,MAAA,IAAI,CAAC,IAAA,EAAM,IAAA,EAAK,EAAG;AACjB,QAAA,eAAA,CAAgB,GAAA,EAAK,oBAAA,EAAsB,MAAA,EAAW,IAAI,CAAA;AAC1D,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,QAAQ,IAAA,EAAK;AAAA,MAC1D;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,EAAE,MAAA,EAAQ,kBAAA,EAAmB,GAAI,MAAM,SAAA,CAAU;AAAA,UACrD,IAAA;AAAA,UACA,UAAU,EAAC;AAAA,UACX,SAAA,EAAW,OAAA;AAAA,UACX,YAAA,EAAc,SAAA,CAAU,MAAM,CAAA,IAAK;AAAC,SACrC,CAAA;AAED,QAAA,IAAI,IAAA,EAAM;AACR,UAAA,GAAA,CAAI,EAAA,EAAI,IAAA,GAAO,EAAE,EAAA,EAAI,IAAA,EAAM,QAAQ,EAAE,MAAA,EAAQ,kBAAA,EAAmB,EAAG,CAAA;AAAA,QACrE,CAAA,MAAO;AACL,UAAA,GAAA,CAAI,EAAA,EAAI,OAAO,CAAA,OAAA,EAAU,MAAA,CAAO,IAAI,CAAA,GAAA,EAAM,MAAA,CAAO,EAAE,CAAA,CAAA,CAAG,CAAA;AACtD,UAAA,IAAI,kBAAA,CAAmB,SAAS,CAAA,EAAG;AACjC,YAAA,GAAA,CAAI,IAAI,IAAA,GAAO,CAAA,kBAAA,EAAqB,mBAAmB,MAAA,GAAS,CAAA,GAAI,MAAM,EAAE,CAAA,EAAA,EAAK,mBAAmB,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,EAAE,EAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,UACnI;AAAA,QACF;AACA,QAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,QAAQ,EAAE,MAAA,EAAQ,oBAAmB,EAAE;AAAA,MAC5D,SAAS,GAAA,EAAK;AACZ,QAAA,GAAA,CAAI,QAAA,CAAS,MAAA,EAAQ,KAAA,GAAQ,2BAAA,EAA6B,GAAA,YAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAC,CAAA;AAC7G,QAAA,WAAA,CAAY,GAAA,EAAK,KAAK,IAAI,CAAA;AAC1B,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAA,EAAG,MAAA,EAAQ,IAAA,EAAK;AAAA,MAC5F;AAAA,IACF;AAAA;AAEJ,CAAC","file":"person-add.js","sourcesContent":["/** Parses a `--flag=a,b,c` value into a trimmed string list. */\nexport function parseList(csv?: string): string[] | undefined {\n if (csv === undefined) {return undefined;}\n return csv\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n}\n\n/** Parses an ISO date/time flag into epoch milliseconds. Throws on garbage input. */\nexport function parseDate(value: string): number {\n const ms = Date.parse(value);\n if (Number.isNaN(ms)) {\n throw new Error(`Invalid date: \"${value}\" — expected ISO 8601 (e.g. 2026-09-01)`);\n }\n return ms;\n}\n","import { defineCommand, handleError, validationError, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { addPerson } from '@kb-labs/steward-core';\nimport { parseList } from '../utils/flags.js';\n\ntype Flags = { name?: string; topics?: string; company?: string; json?: boolean };\n\nexport default defineCommand({\n id: 'steward:person.add',\n description: 'Add a contact. Returns a possibleDuplicates warning, not an error, on a name match',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<Flags>) {\n const { name, topics, company, json } = input.flags;\n if (!name?.trim()) {\n validationError(ctx, '--name is required', undefined, json);\n return { ok: false, error: 'INVALID_ARGS', result: null };\n }\n\n try {\n const { person, possibleDuplicates } = await addPerson({\n name,\n contacts: [],\n companyId: company,\n globalTopics: parseList(topics) ?? [],\n });\n\n if (json) {\n ctx.ui?.json?.({ ok: true, result: { person, possibleDuplicates } });\n } else {\n ctx.ui?.info?.(`Added \"${person.name}\" (${person.id})`);\n if (possibleDuplicates.length > 0) {\n ctx.ui?.warn?.(`Possible duplicate${possibleDuplicates.length > 1 ? 's' : ''}: ${possibleDuplicates.map((p) => p.id).join(', ')}`);\n }\n }\n return { ok: true, result: { person, possibleDuplicates } };\n } catch (err) {\n ctx.platform.logger?.error?.('steward:person.add failed', err instanceof Error ? err : new Error(String(err)));\n handleError(ctx, err, json);\n return { ok: false, error: err instanceof Error ? err.message : String(err), result: null };\n }\n },\n },\n});\n"]}
@@ -0,0 +1,10 @@
1
+ import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import * as _kb_labs_steward_contracts from '@kb-labs/steward-contracts';
3
+ import { CLIInput } from '@kb-labs/sdk';
4
+
5
+ type Flags = {
6
+ json?: boolean;
7
+ };
8
+ declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<Flags>, _kb_labs_steward_contracts.Person>;
9
+
10
+ export { _default as default };
@@ -0,0 +1,43 @@
1
+ import { defineCommand, validationError, handleError } from '@kb-labs/sdk';
2
+ import { getPerson } from '@kb-labs/steward-core';
3
+
4
+ // src/commands/person-get.ts
5
+ var person_get_default = defineCommand({
6
+ id: "steward:person.get",
7
+ description: "Get a contact by id or exact name",
8
+ handler: {
9
+ async execute(ctx, input) {
10
+ const [idOrName] = input.argv;
11
+ const { json } = input.flags;
12
+ if (!idOrName) {
13
+ validationError(ctx, "idOrName is required", "Usage: kb steward person get <idOrName>", json);
14
+ return { ok: false, error: "INVALID_ARGS", result: null };
15
+ }
16
+ try {
17
+ const person = await getPerson(idOrName);
18
+ if (!person) {
19
+ if (json) {
20
+ ctx.ui?.json?.({ ok: false, error: { code: "NOT_FOUND", message: `No person matching "${idOrName}"` } });
21
+ } else {
22
+ ctx.ui?.error?.(`No person matching "${idOrName}"`);
23
+ }
24
+ return { ok: false, error: "NOT_FOUND", result: null };
25
+ }
26
+ if (json) {
27
+ ctx.ui?.json?.({ ok: true, result: person });
28
+ } else {
29
+ ctx.ui?.info?.(`${person.name} \u2014 topics: ${person.globalTopics.join(", ") || "(none)"}`);
30
+ }
31
+ return { ok: true, result: person };
32
+ } catch (err) {
33
+ ctx.platform.logger?.error?.("steward:person.get failed", err instanceof Error ? err : new Error(String(err)));
34
+ handleError(ctx, err, json);
35
+ return { ok: false, error: err instanceof Error ? err.message : String(err), result: null };
36
+ }
37
+ }
38
+ }
39
+ });
40
+
41
+ export { person_get_default as default };
42
+ //# sourceMappingURL=person-get.js.map
43
+ //# sourceMappingURL=person-get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/commands/person-get.ts"],"names":[],"mappings":";;;;AAKA,IAAO,qBAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,oBAAA;AAAA,EACJ,WAAA,EAAa,mCAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAwB;AAC1D,MAAA,MAAM,CAAC,QAAQ,CAAA,GAAI,KAAA,CAAM,IAAA;AACzB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,KAAA,CAAM,KAAA;AACvB,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,eAAA,CAAgB,GAAA,EAAK,sBAAA,EAAwB,yCAAA,EAA2C,IAAI,CAAA;AAC5F,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,QAAQ,IAAA,EAAK;AAAA,MAC1D;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,QAAQ,CAAA;AACvC,QAAA,IAAI,CAAC,MAAA,EAAQ;AACX,UAAA,IAAI,IAAA,EAAM;AAAC,YAAA,GAAA,CAAI,EAAA,EAAI,IAAA,GAAO,EAAE,EAAA,EAAI,OAAO,KAAA,EAAO,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,CAAA,oBAAA,EAAuB,QAAQ,CAAA,CAAA,CAAA,IAAO,CAAA;AAAA,UAAE,CAAA,MAC/G;AAAC,YAAA,GAAA,CAAI,EAAA,EAAI,KAAA,GAAQ,CAAA,oBAAA,EAAuB,QAAQ,CAAA,CAAA,CAAG,CAAA;AAAA,UAAE;AAC1D,UAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,WAAA,EAAa,QAAQ,IAAA,EAAK;AAAA,QACvD;AAEA,QAAA,IAAI,IAAA,EAAM;AAAC,UAAA,GAAA,CAAI,IAAI,IAAA,GAAO,EAAE,IAAI,IAAA,EAAM,MAAA,EAAQ,QAAQ,CAAA;AAAA,QAAE,CAAA,MACnD;AAAC,UAAA,GAAA,CAAI,EAAA,EAAI,IAAA,GAAO,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,gBAAA,EAAc,MAAA,CAAO,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA,IAAK,QAAQ,CAAA,CAAE,CAAA;AAAA,QAAE;AAC/F,QAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAO;AAAA,MACpC,SAAS,GAAA,EAAK;AACZ,QAAA,GAAA,CAAI,QAAA,CAAS,MAAA,EAAQ,KAAA,GAAQ,2BAAA,EAA6B,GAAA,YAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAC,CAAA;AAC7G,QAAA,WAAA,CAAY,GAAA,EAAK,KAAK,IAAI,CAAA;AAC1B,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAA,EAAG,MAAA,EAAQ,IAAA,EAAK;AAAA,MAC5F;AAAA,IACF;AAAA;AAEJ,CAAC","file":"person-get.js","sourcesContent":["import { defineCommand, handleError, validationError, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { getPerson } from '@kb-labs/steward-core';\n\ntype Flags = { json?: boolean };\n\nexport default defineCommand({\n id: 'steward:person.get',\n description: 'Get a contact by id or exact name',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<Flags>) {\n const [idOrName] = input.argv;\n const { json } = input.flags;\n if (!idOrName) {\n validationError(ctx, 'idOrName is required', 'Usage: kb steward person get <idOrName>', json);\n return { ok: false, error: 'INVALID_ARGS', result: null };\n }\n\n try {\n const person = await getPerson(idOrName);\n if (!person) {\n if (json) {ctx.ui?.json?.({ ok: false, error: { code: 'NOT_FOUND', message: `No person matching \"${idOrName}\"` } });}\n else {ctx.ui?.error?.(`No person matching \"${idOrName}\"`);}\n return { ok: false, error: 'NOT_FOUND', result: null };\n }\n\n if (json) {ctx.ui?.json?.({ ok: true, result: person });}\n else {ctx.ui?.info?.(`${person.name} — topics: ${person.globalTopics.join(', ') || '(none)'}`);}\n return { ok: true, result: person };\n } catch (err) {\n ctx.platform.logger?.error?.('steward:person.get failed', err instanceof Error ? err : new Error(String(err)));\n handleError(ctx, err, json);\n return { ok: false, error: err instanceof Error ? err.message : String(err), result: null };\n }\n },\n },\n});\n"]}
@@ -0,0 +1,10 @@
1
+ import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import * as _kb_labs_steward_contracts from '@kb-labs/steward-contracts';
3
+ import { CLIInput } from '@kb-labs/sdk';
4
+
5
+ type Flags = {
6
+ json?: boolean;
7
+ };
8
+ declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<Flags>, _kb_labs_steward_contracts.Person[]>;
9
+
10
+ export { _default as default };
@@ -0,0 +1,32 @@
1
+ import { defineCommand, handleError } from '@kb-labs/sdk';
2
+ import { listPeople } from '@kb-labs/steward-core';
3
+
4
+ // src/commands/person-list.ts
5
+ var person_list_default = defineCommand({
6
+ id: "steward:person.list",
7
+ description: "List every known contact",
8
+ handler: {
9
+ async execute(ctx, input) {
10
+ const { json } = input.flags;
11
+ try {
12
+ const people = await listPeople();
13
+ if (json) {
14
+ ctx.ui?.json?.({ ok: true, result: people });
15
+ } else if (people.length === 0) {
16
+ ctx.ui?.info?.("No contacts yet.");
17
+ } else {
18
+ ctx.ui?.chain?.(people.map((p) => ({ title: p.name, sections: [{ items: [p.globalTopics.join(", ") || "(no topics)"] }] })));
19
+ }
20
+ return { ok: true, result: people };
21
+ } catch (err) {
22
+ ctx.platform.logger?.error?.("steward:person.list failed", err instanceof Error ? err : new Error(String(err)));
23
+ handleError(ctx, err, json);
24
+ return { ok: false, error: err instanceof Error ? err.message : String(err), result: null };
25
+ }
26
+ }
27
+ }
28
+ });
29
+
30
+ export { person_list_default as default };
31
+ //# sourceMappingURL=person-list.js.map
32
+ //# sourceMappingURL=person-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/commands/person-list.ts"],"names":[],"mappings":";;;;AAKA,IAAO,sBAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,qBAAA;AAAA,EACJ,WAAA,EAAa,0BAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAwB;AAC1D,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,KAAA,CAAM,KAAA;AACvB,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,UAAA,EAAW;AAChC,QAAA,IAAI,IAAA,EAAM;AAAC,UAAA,GAAA,CAAI,IAAI,IAAA,GAAO,EAAE,IAAI,IAAA,EAAM,MAAA,EAAQ,QAAQ,CAAA;AAAA,QAAE,CAAA,MAAA,IAC/C,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AAAC,UAAA,GAAA,CAAI,EAAA,EAAI,OAAO,kBAAkB,CAAA;AAAA,QAAE,CAAA,MAC7D;AAAC,UAAA,GAAA,CAAI,EAAA,EAAI,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,OAAO,EAAE,KAAA,EAAO,CAAA,CAAE,IAAA,EAAM,QAAA,EAAU,CAAC,EAAE,KAAA,EAAO,CAAC,CAAA,CAAE,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA,IAAK,aAAa,CAAA,EAAG,CAAA,EAAE,CAAE,CAAC,CAAA;AAAA,QAAE;AACnI,QAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAO;AAAA,MACpC,SAAS,GAAA,EAAK;AACZ,QAAA,GAAA,CAAI,QAAA,CAAS,MAAA,EAAQ,KAAA,GAAQ,4BAAA,EAA8B,GAAA,YAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAC,CAAA;AAC9G,QAAA,WAAA,CAAY,GAAA,EAAK,KAAK,IAAI,CAAA;AAC1B,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAA,EAAG,MAAA,EAAQ,IAAA,EAAK;AAAA,MAC5F;AAAA,IACF;AAAA;AAEJ,CAAC","file":"person-list.js","sourcesContent":["import { defineCommand, handleError, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { listPeople } from '@kb-labs/steward-core';\n\ntype Flags = { json?: boolean };\n\nexport default defineCommand({\n id: 'steward:person.list',\n description: 'List every known contact',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<Flags>) {\n const { json } = input.flags;\n try {\n const people = await listPeople();\n if (json) {ctx.ui?.json?.({ ok: true, result: people });}\n else if (people.length === 0) {ctx.ui?.info?.('No contacts yet.');}\n else {ctx.ui?.chain?.(people.map((p) => ({ title: p.name, sections: [{ items: [p.globalTopics.join(', ') || '(no topics)'] }] })));}\n return { ok: true, result: people };\n } catch (err) {\n ctx.platform.logger?.error?.('steward:person.list failed', err instanceof Error ? err : new Error(String(err)));\n handleError(ctx, err, json);\n return { ok: false, error: err instanceof Error ? err.message : String(err), result: null };\n }\n },\n },\n});\n"]}
@@ -0,0 +1,13 @@
1
+ import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import * as _kb_labs_steward_contracts from '@kb-labs/steward-contracts';
3
+ import { CLIInput } from '@kb-labs/sdk';
4
+
5
+ type Flags = {
6
+ name?: string;
7
+ topics?: string;
8
+ company?: string;
9
+ json?: boolean;
10
+ };
11
+ declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<Flags>, _kb_labs_steward_contracts.Person>;
12
+
13
+ export { _default as default };
@@ -0,0 +1,53 @@
1
+ import { defineCommand, validationError, handleError } from '@kb-labs/sdk';
2
+ import { updatePerson } from '@kb-labs/steward-core';
3
+
4
+ // src/commands/person-update.ts
5
+
6
+ // src/utils/flags.ts
7
+ function parseList(csv) {
8
+ if (csv === void 0) {
9
+ return void 0;
10
+ }
11
+ return csv.split(",").map((s) => s.trim()).filter(Boolean);
12
+ }
13
+
14
+ // src/commands/person-update.ts
15
+ var person_update_default = defineCommand({
16
+ id: "steward:person.update",
17
+ description: "Update a contact's name, topics, or company",
18
+ handler: {
19
+ async execute(ctx, input) {
20
+ const [id] = input.argv;
21
+ const { name, topics, company, json } = input.flags;
22
+ if (!id) {
23
+ validationError(ctx, "id is required", "Usage: kb steward person update <id> [--name] [--topics] [--company]", json);
24
+ return { ok: false, error: "INVALID_ARGS", result: null };
25
+ }
26
+ try {
27
+ const person = await updatePerson({ id, name, globalTopics: parseList(topics), companyId: company });
28
+ if (!person) {
29
+ if (json) {
30
+ ctx.ui?.json?.({ ok: false, error: { code: "NOT_FOUND", message: `No person "${id}"` } });
31
+ } else {
32
+ ctx.ui?.error?.(`No person "${id}"`);
33
+ }
34
+ return { ok: false, error: "NOT_FOUND", result: null };
35
+ }
36
+ if (json) {
37
+ ctx.ui?.json?.({ ok: true, result: person });
38
+ } else {
39
+ ctx.ui?.info?.(`Updated "${person.name}"`);
40
+ }
41
+ return { ok: true, result: person };
42
+ } catch (err) {
43
+ ctx.platform.logger?.error?.("steward:person.update failed", err instanceof Error ? err : new Error(String(err)));
44
+ handleError(ctx, err, json);
45
+ return { ok: false, error: err instanceof Error ? err.message : String(err), result: null };
46
+ }
47
+ }
48
+ }
49
+ });
50
+
51
+ export { person_update_default as default };
52
+ //# sourceMappingURL=person-update.js.map
53
+ //# sourceMappingURL=person-update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/flags.ts","../../src/commands/person-update.ts"],"names":[],"mappings":";;;;;;AACO,SAAS,UAAU,GAAA,EAAoC;AAC5D,EAAA,IAAI,QAAQ,MAAA,EAAW;AAAC,IAAA,OAAO,MAAA;AAAA,EAAU;AACzC,EAAA,OAAO,GAAA,CACJ,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA,CACnB,MAAA,CAAO,OAAO,CAAA;AACnB;;;ACDA,IAAO,wBAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,uBAAA;AAAA,EACJ,WAAA,EAAa,6CAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAwB;AAC1D,MAAA,MAAM,CAAC,EAAE,CAAA,GAAI,KAAA,CAAM,IAAA;AACnB,MAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,IAAA,KAAS,KAAA,CAAM,KAAA;AAC9C,MAAA,IAAI,CAAC,EAAA,EAAI;AACP,QAAA,eAAA,CAAgB,GAAA,EAAK,gBAAA,EAAkB,sEAAA,EAAwE,IAAI,CAAA;AACnH,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,QAAQ,IAAA,EAAK;AAAA,MAC1D;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,YAAA,CAAa,EAAE,EAAA,EAAI,IAAA,EAAM,YAAA,EAAc,SAAA,CAAU,MAAM,CAAA,EAAG,SAAA,EAAW,OAAA,EAAS,CAAA;AACnG,QAAA,IAAI,CAAC,MAAA,EAAQ;AACX,UAAA,IAAI,IAAA,EAAM;AAAC,YAAA,GAAA,CAAI,EAAA,EAAI,IAAA,GAAO,EAAE,EAAA,EAAI,OAAO,KAAA,EAAO,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,CAAA,WAAA,EAAc,EAAE,CAAA,CAAA,CAAA,IAAO,CAAA;AAAA,UAAE,CAAA,MAChG;AAAC,YAAA,GAAA,CAAI,EAAA,EAAI,KAAA,GAAQ,CAAA,WAAA,EAAc,EAAE,CAAA,CAAA,CAAG,CAAA;AAAA,UAAE;AAC3C,UAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,WAAA,EAAa,QAAQ,IAAA,EAAK;AAAA,QACvD;AAEA,QAAA,IAAI,IAAA,EAAM;AAAC,UAAA,GAAA,CAAI,IAAI,IAAA,GAAO,EAAE,IAAI,IAAA,EAAM,MAAA,EAAQ,QAAQ,CAAA;AAAA,QAAE,CAAA,MACnD;AAAC,UAAA,GAAA,CAAI,EAAA,EAAI,IAAA,GAAO,CAAA,SAAA,EAAY,MAAA,CAAO,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,QAAE;AACjD,QAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAO;AAAA,MACpC,SAAS,GAAA,EAAK;AACZ,QAAA,GAAA,CAAI,QAAA,CAAS,MAAA,EAAQ,KAAA,GAAQ,8BAAA,EAAgC,GAAA,YAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAC,CAAA;AAChH,QAAA,WAAA,CAAY,GAAA,EAAK,KAAK,IAAI,CAAA;AAC1B,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAA,EAAG,MAAA,EAAQ,IAAA,EAAK;AAAA,MAC5F;AAAA,IACF;AAAA;AAEJ,CAAC","file":"person-update.js","sourcesContent":["/** Parses a `--flag=a,b,c` value into a trimmed string list. */\nexport function parseList(csv?: string): string[] | undefined {\n if (csv === undefined) {return undefined;}\n return csv\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n}\n\n/** Parses an ISO date/time flag into epoch milliseconds. Throws on garbage input. */\nexport function parseDate(value: string): number {\n const ms = Date.parse(value);\n if (Number.isNaN(ms)) {\n throw new Error(`Invalid date: \"${value}\" — expected ISO 8601 (e.g. 2026-09-01)`);\n }\n return ms;\n}\n","import { defineCommand, handleError, validationError, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { updatePerson } from '@kb-labs/steward-core';\nimport { parseList } from '../utils/flags.js';\n\ntype Flags = { name?: string; topics?: string; company?: string; json?: boolean };\n\nexport default defineCommand({\n id: 'steward:person.update',\n description: \"Update a contact's name, topics, or company\",\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<Flags>) {\n const [id] = input.argv;\n const { name, topics, company, json } = input.flags;\n if (!id) {\n validationError(ctx, 'id is required', 'Usage: kb steward person update <id> [--name] [--topics] [--company]', json);\n return { ok: false, error: 'INVALID_ARGS', result: null };\n }\n\n try {\n const person = await updatePerson({ id, name, globalTopics: parseList(topics), companyId: company });\n if (!person) {\n if (json) {ctx.ui?.json?.({ ok: false, error: { code: 'NOT_FOUND', message: `No person \"${id}\"` } });}\n else {ctx.ui?.error?.(`No person \"${id}\"`);}\n return { ok: false, error: 'NOT_FOUND', result: null };\n }\n\n if (json) {ctx.ui?.json?.({ ok: true, result: person });}\n else {ctx.ui?.info?.(`Updated \"${person.name}\"`);}\n return { ok: true, result: person };\n } catch (err) {\n ctx.platform.logger?.error?.('steward:person.update failed', err instanceof Error ? err : new Error(String(err)));\n handleError(ctx, err, json);\n return { ok: false, error: err instanceof Error ? err.message : String(err), result: null };\n }\n },\n },\n});\n"]}
@@ -0,0 +1,13 @@
1
+ import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import * as _kb_labs_steward_contracts from '@kb-labs/steward-contracts';
3
+ import { CLIInput } from '@kb-labs/sdk';
4
+
5
+ type Flags = {
6
+ name?: string;
7
+ status?: string;
8
+ description?: string;
9
+ json?: boolean;
10
+ };
11
+ declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<Flags>, _kb_labs_steward_contracts.Project>;
12
+
13
+ export { _default as default };
@@ -0,0 +1,38 @@
1
+ import { defineCommand, validationError, handleError } from '@kb-labs/sdk';
2
+ import { addProject } from '@kb-labs/steward-core';
3
+
4
+ // src/commands/project-add.ts
5
+ var project_add_default = defineCommand({
6
+ id: "steward:project.add",
7
+ description: "Create a new project",
8
+ handler: {
9
+ async execute(ctx, input) {
10
+ const { name, status, description, json } = input.flags;
11
+ if (!name?.trim()) {
12
+ validationError(ctx, "--name is required", void 0, json);
13
+ return { ok: false, error: "INVALID_ARGS", result: null };
14
+ }
15
+ try {
16
+ const project = await addProject({
17
+ name,
18
+ status: status ?? "active",
19
+ description
20
+ });
21
+ if (json) {
22
+ ctx.ui?.json?.({ ok: true, result: project });
23
+ } else {
24
+ ctx.ui?.info?.(`Created project "${project.name}" (${project.id})`);
25
+ }
26
+ return { ok: true, result: project };
27
+ } catch (err) {
28
+ ctx.platform.logger?.error?.("steward:project.add failed", err instanceof Error ? err : new Error(String(err)));
29
+ handleError(ctx, err, json);
30
+ return { ok: false, error: err instanceof Error ? err.message : String(err), result: null };
31
+ }
32
+ }
33
+ }
34
+ });
35
+
36
+ export { project_add_default as default };
37
+ //# sourceMappingURL=project-add.js.map
38
+ //# sourceMappingURL=project-add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/commands/project-add.ts"],"names":[],"mappings":";;;;AAKA,IAAO,sBAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,qBAAA;AAAA,EACJ,WAAA,EAAa,sBAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAwB;AAC1D,MAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,WAAA,EAAa,IAAA,KAAS,KAAA,CAAM,KAAA;AAClD,MAAA,IAAI,CAAC,IAAA,EAAM,IAAA,EAAK,EAAG;AACjB,QAAA,eAAA,CAAgB,GAAA,EAAK,oBAAA,EAAsB,MAAA,EAAW,IAAI,CAAA;AAC1D,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,QAAQ,IAAA,EAAK;AAAA,MAC1D;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW;AAAA,UAC/B,IAAA;AAAA,UACA,QAAS,MAAA,IAA+C,QAAA;AAAA,UACxD;AAAA,SACD,CAAA;AAED,QAAA,IAAI,IAAA,EAAM;AACR,UAAA,GAAA,CAAI,IAAI,IAAA,GAAO,EAAE,IAAI,IAAA,EAAM,MAAA,EAAQ,SAAS,CAAA;AAAA,QAC9C,CAAA,MAAO;AACL,UAAA,GAAA,CAAI,EAAA,EAAI,OAAO,CAAA,iBAAA,EAAoB,OAAA,CAAQ,IAAI,CAAA,GAAA,EAAM,OAAA,CAAQ,EAAE,CAAA,CAAA,CAAG,CAAA;AAAA,QACpE;AACA,QAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAQ;AAAA,MACrC,SAAS,GAAA,EAAK;AACZ,QAAA,GAAA,CAAI,QAAA,CAAS,MAAA,EAAQ,KAAA,GAAQ,4BAAA,EAA8B,GAAA,YAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAC,CAAA;AAC9G,QAAA,WAAA,CAAY,GAAA,EAAK,KAAK,IAAI,CAAA;AAC1B,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAA,EAAG,MAAA,EAAQ,IAAA,EAAK;AAAA,MAC5F;AAAA,IACF;AAAA;AAEJ,CAAC","file":"project-add.js","sourcesContent":["import { defineCommand, handleError, validationError, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { addProject } from '@kb-labs/steward-core';\n\ntype Flags = { name?: string; status?: string; description?: string; json?: boolean };\n\nexport default defineCommand({\n id: 'steward:project.add',\n description: 'Create a new project',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<Flags>) {\n const { name, status, description, json } = input.flags;\n if (!name?.trim()) {\n validationError(ctx, '--name is required', undefined, json);\n return { ok: false, error: 'INVALID_ARGS', result: null };\n }\n\n try {\n const project = await addProject({\n name,\n status: (status as 'active' | 'paused' | 'archived') ?? 'active',\n description,\n });\n\n if (json) {\n ctx.ui?.json?.({ ok: true, result: project });\n } else {\n ctx.ui?.info?.(`Created project \"${project.name}\" (${project.id})`);\n }\n return { ok: true, result: project };\n } catch (err) {\n ctx.platform.logger?.error?.('steward:project.add failed', err instanceof Error ? err : new Error(String(err)));\n handleError(ctx, err, json);\n return { ok: false, error: err instanceof Error ? err.message : String(err), result: null };\n }\n },\n },\n});\n"]}
@@ -0,0 +1,10 @@
1
+ import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import * as _kb_labs_steward_core from '@kb-labs/steward-core';
3
+ import { CLIInput } from '@kb-labs/sdk';
4
+
5
+ type Flags = {
6
+ json?: boolean;
7
+ };
8
+ declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<Flags>, _kb_labs_steward_core.ProjectCard>;
9
+
10
+ export { _default as default };
@@ -0,0 +1,43 @@
1
+ import { defineCommand, validationError, handleError } from '@kb-labs/sdk';
2
+ import { getProject } from '@kb-labs/steward-core';
3
+
4
+ // src/commands/project-get.ts
5
+ var project_get_default = defineCommand({
6
+ id: "steward:project.get",
7
+ description: "Get a project card: status, resources, and members",
8
+ handler: {
9
+ async execute(ctx, input) {
10
+ const [idOrName] = input.argv;
11
+ const { json } = input.flags;
12
+ if (!idOrName) {
13
+ validationError(ctx, "idOrName is required", "Usage: kb steward project get <idOrName>", json);
14
+ return { ok: false, error: "INVALID_ARGS", result: null };
15
+ }
16
+ try {
17
+ const card = await getProject(idOrName);
18
+ if (!card) {
19
+ if (json) {
20
+ ctx.ui?.json?.({ ok: false, error: { code: "NOT_FOUND", message: `No project matching "${idOrName}"` } });
21
+ } else {
22
+ ctx.ui?.error?.(`No project matching "${idOrName}"`);
23
+ }
24
+ return { ok: false, error: "NOT_FOUND", result: null };
25
+ }
26
+ if (json) {
27
+ ctx.ui?.json?.({ ok: true, result: card });
28
+ } else {
29
+ ctx.ui?.info?.(`${card.project.name} [${card.project.status}] \u2014 ${card.resources.length} resources, ${card.members.length} members`);
30
+ }
31
+ return { ok: true, result: card };
32
+ } catch (err) {
33
+ ctx.platform.logger?.error?.("steward:project.get failed", err instanceof Error ? err : new Error(String(err)));
34
+ handleError(ctx, err, json);
35
+ return { ok: false, error: err instanceof Error ? err.message : String(err), result: null };
36
+ }
37
+ }
38
+ }
39
+ });
40
+
41
+ export { project_get_default as default };
42
+ //# sourceMappingURL=project-get.js.map
43
+ //# sourceMappingURL=project-get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/commands/project-get.ts"],"names":[],"mappings":";;;;AAKA,IAAO,sBAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,qBAAA;AAAA,EACJ,WAAA,EAAa,oDAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAwB;AAC1D,MAAA,MAAM,CAAC,QAAQ,CAAA,GAAI,KAAA,CAAM,IAAA;AACzB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,KAAA,CAAM,KAAA;AACvB,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,eAAA,CAAgB,GAAA,EAAK,sBAAA,EAAwB,0CAAA,EAA4C,IAAI,CAAA;AAC7F,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,QAAQ,IAAA,EAAK;AAAA,MAC1D;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,MAAM,UAAA,CAAW,QAAQ,CAAA;AACtC,QAAA,IAAI,CAAC,IAAA,EAAM;AACT,UAAA,IAAI,IAAA,EAAM;AACR,YAAA,GAAA,CAAI,EAAA,EAAI,IAAA,GAAO,EAAE,EAAA,EAAI,OAAO,KAAA,EAAO,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,CAAA,qBAAA,EAAwB,QAAQ,CAAA,CAAA,CAAA,IAAO,CAAA;AAAA,UAC1G,CAAA,MAAO;AACL,YAAA,GAAA,CAAI,EAAA,EAAI,KAAA,GAAQ,CAAA,qBAAA,EAAwB,QAAQ,CAAA,CAAA,CAAG,CAAA;AAAA,UACrD;AACA,UAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,WAAA,EAAa,QAAQ,IAAA,EAAK;AAAA,QACvD;AAEA,QAAA,IAAI,IAAA,EAAM;AACR,UAAA,GAAA,CAAI,IAAI,IAAA,GAAO,EAAE,IAAI,IAAA,EAAM,MAAA,EAAQ,MAAM,CAAA;AAAA,QAC3C,CAAA,MAAO;AACL,UAAA,GAAA,CAAI,IAAI,IAAA,GAAO,CAAA,EAAG,KAAK,OAAA,CAAQ,IAAI,KAAK,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,SAAA,EAAO,KAAK,SAAA,CAAU,MAAM,eAAe,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,QAAA,CAAU,CAAA;AAAA,QACrI;AACA,QAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAK;AAAA,MAClC,SAAS,GAAA,EAAK;AACZ,QAAA,GAAA,CAAI,QAAA,CAAS,MAAA,EAAQ,KAAA,GAAQ,4BAAA,EAA8B,GAAA,YAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAC,CAAA;AAC9G,QAAA,WAAA,CAAY,GAAA,EAAK,KAAK,IAAI,CAAA;AAC1B,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAA,EAAG,MAAA,EAAQ,IAAA,EAAK;AAAA,MAC5F;AAAA,IACF;AAAA;AAEJ,CAAC","file":"project-get.js","sourcesContent":["import { defineCommand, handleError, validationError, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { getProject } from '@kb-labs/steward-core';\n\ntype Flags = { json?: boolean };\n\nexport default defineCommand({\n id: 'steward:project.get',\n description: 'Get a project card: status, resources, and members',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<Flags>) {\n const [idOrName] = input.argv;\n const { json } = input.flags;\n if (!idOrName) {\n validationError(ctx, 'idOrName is required', 'Usage: kb steward project get <idOrName>', json);\n return { ok: false, error: 'INVALID_ARGS', result: null };\n }\n\n try {\n const card = await getProject(idOrName);\n if (!card) {\n if (json) {\n ctx.ui?.json?.({ ok: false, error: { code: 'NOT_FOUND', message: `No project matching \"${idOrName}\"` } });\n } else {\n ctx.ui?.error?.(`No project matching \"${idOrName}\"`);\n }\n return { ok: false, error: 'NOT_FOUND', result: null };\n }\n\n if (json) {\n ctx.ui?.json?.({ ok: true, result: card });\n } else {\n ctx.ui?.info?.(`${card.project.name} [${card.project.status}] — ${card.resources.length} resources, ${card.members.length} members`);\n }\n return { ok: true, result: card };\n } catch (err) {\n ctx.platform.logger?.error?.('steward:project.get failed', err instanceof Error ? err : new Error(String(err)));\n handleError(ctx, err, json);\n return { ok: false, error: err instanceof Error ? err.message : String(err), result: null };\n }\n },\n },\n});\n"]}
@@ -0,0 +1,11 @@
1
+ import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import * as _kb_labs_steward_contracts from '@kb-labs/steward-contracts';
3
+ import { CLIInput } from '@kb-labs/sdk';
4
+
5
+ type Flags = {
6
+ status?: string;
7
+ json?: boolean;
8
+ };
9
+ declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<Flags>, _kb_labs_steward_contracts.Project[]>;
10
+
11
+ export { _default as default };
@@ -0,0 +1,34 @@
1
+ import { defineCommand, handleError } from '@kb-labs/sdk';
2
+ import { listProjects } from '@kb-labs/steward-core';
3
+
4
+ // src/commands/project-list.ts
5
+ var project_list_default = defineCommand({
6
+ id: "steward:project.list",
7
+ description: "List projects, optionally filtered by status",
8
+ handler: {
9
+ async execute(ctx, input) {
10
+ const { status, json } = input.flags;
11
+ try {
12
+ const projects = await listProjects({ status });
13
+ if (json) {
14
+ ctx.ui?.json?.({ ok: true, result: projects });
15
+ } else if (projects.length === 0) {
16
+ ctx.ui?.info?.("No projects yet.");
17
+ } else {
18
+ ctx.ui?.chain?.(
19
+ projects.map((p) => ({ title: `${p.name} [${p.status}]`, sections: [{ items: [p.id] }] }))
20
+ );
21
+ }
22
+ return { ok: true, result: projects };
23
+ } catch (err) {
24
+ ctx.platform.logger?.error?.("steward:project.list failed", err instanceof Error ? err : new Error(String(err)));
25
+ handleError(ctx, err, json);
26
+ return { ok: false, error: err instanceof Error ? err.message : String(err), result: null };
27
+ }
28
+ }
29
+ }
30
+ });
31
+
32
+ export { project_list_default as default };
33
+ //# sourceMappingURL=project-list.js.map
34
+ //# sourceMappingURL=project-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/commands/project-list.ts"],"names":[],"mappings":";;;;AAKA,IAAO,uBAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,sBAAA;AAAA,EACJ,WAAA,EAAa,8CAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAwB;AAC1D,MAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAK,GAAI,KAAA,CAAM,KAAA;AAC/B,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa,EAAE,QAAgE,CAAA;AACtG,QAAA,IAAI,IAAA,EAAM;AACR,UAAA,GAAA,CAAI,IAAI,IAAA,GAAO,EAAE,IAAI,IAAA,EAAM,MAAA,EAAQ,UAAU,CAAA;AAAA,QAC/C,CAAA,MAAA,IAAW,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AAChC,UAAA,GAAA,CAAI,EAAA,EAAI,OAAO,kBAAkB,CAAA;AAAA,QACnC,CAAA,MAAO;AACL,UAAA,GAAA,CAAI,EAAA,EAAI,KAAA;AAAA,YACN,QAAA,CAAS,IAAI,CAAC,CAAA,MAAO,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,MAAM,CAAA,CAAA,CAAA,EAAK,QAAA,EAAU,CAAC,EAAE,KAAA,EAAO,CAAC,EAAE,EAAE,CAAA,EAAG,CAAA,EAAE,CAAE;AAAA,WAC3F;AAAA,QACF;AACA,QAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,QAAA,EAAS;AAAA,MACtC,SAAS,GAAA,EAAK;AACZ,QAAA,GAAA,CAAI,QAAA,CAAS,MAAA,EAAQ,KAAA,GAAQ,6BAAA,EAA+B,GAAA,YAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAC,CAAA;AAC/G,QAAA,WAAA,CAAY,GAAA,EAAK,KAAK,IAAI,CAAA;AAC1B,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAA,EAAG,MAAA,EAAQ,IAAA,EAAK;AAAA,MAC5F;AAAA,IACF;AAAA;AAEJ,CAAC","file":"project-list.js","sourcesContent":["import { defineCommand, handleError, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { listProjects } from '@kb-labs/steward-core';\n\ntype Flags = { status?: string; json?: boolean };\n\nexport default defineCommand({\n id: 'steward:project.list',\n description: 'List projects, optionally filtered by status',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<Flags>) {\n const { status, json } = input.flags;\n try {\n const projects = await listProjects({ status: status as 'active' | 'paused' | 'archived' | undefined });\n if (json) {\n ctx.ui?.json?.({ ok: true, result: projects });\n } else if (projects.length === 0) {\n ctx.ui?.info?.('No projects yet.');\n } else {\n ctx.ui?.chain?.(\n projects.map((p) => ({ title: `${p.name} [${p.status}]`, sections: [{ items: [p.id] }] })),\n );\n }\n return { ok: true, result: projects };\n } catch (err) {\n ctx.platform.logger?.error?.('steward:project.list failed', err instanceof Error ? err : new Error(String(err)));\n handleError(ctx, err, json);\n return { ok: false, error: err instanceof Error ? err.message : String(err), result: null };\n }\n },\n },\n});\n"]}
@@ -0,0 +1,12 @@
1
+ import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import * as _kb_labs_steward_contracts from '@kb-labs/steward-contracts';
3
+ import { CLIInput } from '@kb-labs/sdk';
4
+
5
+ type Flags = {
6
+ status?: string;
7
+ description?: string;
8
+ json?: boolean;
9
+ };
10
+ declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<Flags>, _kb_labs_steward_contracts.Project>;
11
+
12
+ export { _default as default };