@kb-labs/steward-entry 2.119.0-canary.85d060ea6
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 +5 -0
- package/dist/commands/commitment-add.d.ts +15 -0
- package/dist/commands/commitment-add.js +53 -0
- package/dist/commands/commitment-add.js.map +1 -0
- package/dist/commands/commitment-done.d.ts +10 -0
- package/dist/commands/commitment-done.js +43 -0
- package/dist/commands/commitment-done.js.map +1 -0
- package/dist/commands/commitment-drop.d.ts +11 -0
- package/dist/commands/commitment-drop.js +43 -0
- package/dist/commands/commitment-drop.js.map +1 -0
- package/dist/commands/commitment-list.d.ts +13 -0
- package/dist/commands/commitment-list.js +37 -0
- package/dist/commands/commitment-list.js.map +1 -0
- package/dist/commands/commitment-snooze.d.ts +12 -0
- package/dist/commands/commitment-snooze.js +54 -0
- package/dist/commands/commitment-snooze.js.map +1 -0
- package/dist/commands/company-add.d.ts +11 -0
- package/dist/commands/company-add.js +34 -0
- package/dist/commands/company-add.js.map +1 -0
- package/dist/commands/company-list.d.ts +10 -0
- package/dist/commands/company-list.js +32 -0
- package/dist/commands/company-list.js.map +1 -0
- package/dist/commands/event-add.d.ts +14 -0
- package/dist/commands/event-add.js +46 -0
- package/dist/commands/event-add.js.map +1 -0
- package/dist/commands/event-list.d.ts +13 -0
- package/dist/commands/event-list.js +38 -0
- package/dist/commands/event-list.js.map +1 -0
- package/dist/commands/member-add.d.ts +15 -0
- package/dist/commands/member-add.js +50 -0
- package/dist/commands/member-add.js.map +1 -0
- package/dist/commands/member-list.d.ts +10 -0
- package/dist/commands/member-list.js +37 -0
- package/dist/commands/member-list.js.map +1 -0
- package/dist/commands/person-add.d.ts +16 -0
- package/dist/commands/person-add.js +52 -0
- package/dist/commands/person-add.js.map +1 -0
- package/dist/commands/person-get.d.ts +10 -0
- package/dist/commands/person-get.js +43 -0
- package/dist/commands/person-get.js.map +1 -0
- package/dist/commands/person-list.d.ts +10 -0
- package/dist/commands/person-list.js +32 -0
- package/dist/commands/person-list.js.map +1 -0
- package/dist/commands/person-update.d.ts +13 -0
- package/dist/commands/person-update.js +53 -0
- package/dist/commands/person-update.js.map +1 -0
- package/dist/commands/project-add.d.ts +13 -0
- package/dist/commands/project-add.js +38 -0
- package/dist/commands/project-add.js.map +1 -0
- package/dist/commands/project-get.d.ts +10 -0
- package/dist/commands/project-get.js +43 -0
- package/dist/commands/project-get.js.map +1 -0
- package/dist/commands/project-list.d.ts +11 -0
- package/dist/commands/project-list.js +34 -0
- package/dist/commands/project-list.js.map +1 -0
- package/dist/commands/project-update.d.ts +12 -0
- package/dist/commands/project-update.js +47 -0
- package/dist/commands/project-update.js.map +1 -0
- package/dist/commands/resource-add.d.ts +14 -0
- package/dist/commands/resource-add.js +44 -0
- package/dist/commands/resource-add.js.map +1 -0
- package/dist/commands/resource-list.d.ts +10 -0
- package/dist/commands/resource-list.js +37 -0
- package/dist/commands/resource-list.js.map +1 -0
- package/dist/commands/review.d.ts +10 -0
- package/dist/commands/review.js +35 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/topic-add.d.ts +12 -0
- package/dist/commands/topic-add.js +44 -0
- package/dist/commands/topic-add.js.map +1 -0
- package/dist/commands/topic-list.d.ts +10 -0
- package/dist/commands/topic-list.js +32 -0
- package/dist/commands/topic-list.js.map +1 -0
- package/dist/commands/who.d.ts +11 -0
- package/dist/commands/who.js +42 -0
- package/dist/commands/who.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +406 -0
- package/dist/index.js.map +1 -0
- package/dist/jobs/daily-review.d.ts +11 -0
- package/dist/jobs/daily-review.js +47 -0
- package/dist/jobs/daily-review.js.map +1 -0
- package/dist/jobs/export-backup.d.ts +13 -0
- package/dist/jobs/export-backup.js +32 -0
- package/dist/jobs/export-backup.js.map +1 -0
- package/dist/manifest.d.ts +490 -0
- package/dist/manifest.js +406 -0
- package/dist/manifest.js.map +1 -0
- package/dist/manifest.json +728 -0
- package/package.json +55 -0
package/README.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
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
|
+
text?: string;
|
|
7
|
+
person?: string;
|
|
8
|
+
project?: string;
|
|
9
|
+
'remind-at'?: string;
|
|
10
|
+
'stale-after-days'?: number;
|
|
11
|
+
json?: boolean;
|
|
12
|
+
};
|
|
13
|
+
declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<Flags>, _kb_labs_steward_contracts.Commitment>;
|
|
14
|
+
|
|
15
|
+
export { _default as default };
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { defineCommand, validationError, handleError } from '@kb-labs/sdk';
|
|
2
|
+
import { addCommitment } from '@kb-labs/steward-core';
|
|
3
|
+
|
|
4
|
+
// src/commands/commitment-add.ts
|
|
5
|
+
|
|
6
|
+
// src/utils/flags.ts
|
|
7
|
+
function parseDate(value) {
|
|
8
|
+
const ms = Date.parse(value);
|
|
9
|
+
if (Number.isNaN(ms)) {
|
|
10
|
+
throw new Error(`Invalid date: "${value}" \u2014 expected ISO 8601 (e.g. 2026-09-01)`);
|
|
11
|
+
}
|
|
12
|
+
return ms;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// src/commands/commitment-add.ts
|
|
16
|
+
var commitment_add_default = defineCommand({
|
|
17
|
+
id: "steward:commitment.add",
|
|
18
|
+
description: "Record a promise made to a person, with an optional soft reminder date",
|
|
19
|
+
handler: {
|
|
20
|
+
async execute(ctx, input) {
|
|
21
|
+
const { text, person, project, json } = input.flags;
|
|
22
|
+
const remindAtRaw = input.flags["remind-at"];
|
|
23
|
+
const staleAfterDays = input.flags["stale-after-days"];
|
|
24
|
+
if (!text?.trim()) {
|
|
25
|
+
validationError(ctx, "--text is required", void 0, json);
|
|
26
|
+
return { ok: false, error: "INVALID_ARGS", result: null };
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
const commitment = await addCommitment({
|
|
30
|
+
text,
|
|
31
|
+
personId: person,
|
|
32
|
+
projectId: project,
|
|
33
|
+
remindAt: remindAtRaw ? parseDate(remindAtRaw) : void 0,
|
|
34
|
+
staleAfterDays: staleAfterDays !== void 0 ? Number(staleAfterDays) : 14
|
|
35
|
+
});
|
|
36
|
+
if (json) {
|
|
37
|
+
ctx.ui?.json?.({ ok: true, result: commitment });
|
|
38
|
+
} else {
|
|
39
|
+
ctx.ui?.info?.(`Recorded commitment "${commitment.text}" (${commitment.id})`);
|
|
40
|
+
}
|
|
41
|
+
return { ok: true, result: commitment };
|
|
42
|
+
} catch (err) {
|
|
43
|
+
ctx.platform.logger?.error?.("steward:commitment.add 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 { commitment_add_default as default };
|
|
52
|
+
//# sourceMappingURL=commitment-add.js.map
|
|
53
|
+
//# sourceMappingURL=commitment-add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/flags.ts","../../src/commands/commitment-add.ts"],"names":[],"mappings":";;;;;;AAUO,SAAS,UAAU,KAAA,EAAuB;AAC/C,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAC3B,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,EAAE,CAAA,EAAG;AACpB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,KAAK,CAAA,4CAAA,CAAyC,CAAA;AAAA,EAClF;AACA,EAAA,OAAO,EAAA;AACT;;;ACHA,IAAO,yBAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,wBAAA;AAAA,EACJ,WAAA,EAAa,wEAAA;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,MAAM,WAAA,GAAc,KAAA,CAAM,KAAA,CAAM,WAAW,CAAA;AAC3C,MAAA,MAAM,cAAA,GAAiB,KAAA,CAAM,KAAA,CAAM,kBAAkB,CAAA;AACrD,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,UAAA,GAAa,MAAM,aAAA,CAAc;AAAA,UACrC,IAAA;AAAA,UACA,QAAA,EAAU,MAAA;AAAA,UACV,SAAA,EAAW,OAAA;AAAA,UACX,QAAA,EAAU,WAAA,GAAc,SAAA,CAAU,WAAW,CAAA,GAAI,KAAA,CAAA;AAAA,UACjD,cAAA,EAAgB,cAAA,KAAmB,KAAA,CAAA,GAAY,MAAA,CAAO,cAAc,CAAA,GAAI;AAAA,SACzE,CAAA;AACD,QAAA,IAAI,IAAA,EAAM;AAAC,UAAA,GAAA,CAAI,IAAI,IAAA,GAAO,EAAE,IAAI,IAAA,EAAM,MAAA,EAAQ,YAAY,CAAA;AAAA,QAAE,CAAA,MACvD;AAAC,UAAA,GAAA,CAAI,EAAA,EAAI,OAAO,CAAA,qBAAA,EAAwB,UAAA,CAAW,IAAI,CAAA,GAAA,EAAM,UAAA,CAAW,EAAE,CAAA,CAAA,CAAG,CAAA;AAAA,QAAE;AACpF,QAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,UAAA,EAAW;AAAA,MACxC,SAAS,GAAA,EAAK;AACZ,QAAA,GAAA,CAAI,QAAA,CAAS,MAAA,EAAQ,KAAA,GAAQ,+BAAA,EAAiC,GAAA,YAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAC,CAAA;AACjH,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":"commitment-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 { addCommitment } from '@kb-labs/steward-core';\nimport { parseDate } from '../utils/flags.js';\n\ntype Flags = {\n text?: string;\n person?: string;\n project?: string;\n 'remind-at'?: string;\n 'stale-after-days'?: number;\n json?: boolean;\n};\n\nexport default defineCommand({\n id: 'steward:commitment.add',\n description: 'Record a promise made to a person, with an optional soft reminder date',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<Flags>) {\n const { text, person, project, json } = input.flags;\n const remindAtRaw = input.flags['remind-at'];\n const staleAfterDays = input.flags['stale-after-days'];\n if (!text?.trim()) {\n validationError(ctx, '--text is required', undefined, json);\n return { ok: false, error: 'INVALID_ARGS', result: null };\n }\n\n try {\n const commitment = await addCommitment({\n text,\n personId: person,\n projectId: project,\n remindAt: remindAtRaw ? parseDate(remindAtRaw) : undefined,\n staleAfterDays: staleAfterDays !== undefined ? Number(staleAfterDays) : 14,\n });\n if (json) {ctx.ui?.json?.({ ok: true, result: commitment });}\n else {ctx.ui?.info?.(`Recorded commitment \"${commitment.text}\" (${commitment.id})`);}\n return { ok: true, result: commitment };\n } catch (err) {\n ctx.platform.logger?.error?.('steward:commitment.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.Commitment>;
|
|
9
|
+
|
|
10
|
+
export { _default as default };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { defineCommand, validationError, handleError } from '@kb-labs/sdk';
|
|
2
|
+
import { commitmentDone } from '@kb-labs/steward-core';
|
|
3
|
+
|
|
4
|
+
// src/commands/commitment-done.ts
|
|
5
|
+
var commitment_done_default = defineCommand({
|
|
6
|
+
id: "steward:commitment.done",
|
|
7
|
+
description: "Mark a commitment fulfilled",
|
|
8
|
+
handler: {
|
|
9
|
+
async execute(ctx, input) {
|
|
10
|
+
const [id] = input.argv;
|
|
11
|
+
const { json } = input.flags;
|
|
12
|
+
if (!id) {
|
|
13
|
+
validationError(ctx, "id is required", "Usage: kb steward commitment done <id>", json);
|
|
14
|
+
return { ok: false, error: "INVALID_ARGS", result: null };
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
const commitment = await commitmentDone({ id });
|
|
18
|
+
if (!commitment) {
|
|
19
|
+
if (json) {
|
|
20
|
+
ctx.ui?.json?.({ ok: false, error: { code: "NOT_FOUND", message: `No commitment "${id}"` } });
|
|
21
|
+
} else {
|
|
22
|
+
ctx.ui?.error?.(`No commitment "${id}"`);
|
|
23
|
+
}
|
|
24
|
+
return { ok: false, error: "NOT_FOUND", result: null };
|
|
25
|
+
}
|
|
26
|
+
if (json) {
|
|
27
|
+
ctx.ui?.json?.({ ok: true, result: commitment });
|
|
28
|
+
} else {
|
|
29
|
+
ctx.ui?.info?.(`Done: "${commitment.text}"`);
|
|
30
|
+
}
|
|
31
|
+
return { ok: true, result: commitment };
|
|
32
|
+
} catch (err) {
|
|
33
|
+
ctx.platform.logger?.error?.("steward:commitment.done 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 { commitment_done_default as default };
|
|
42
|
+
//# sourceMappingURL=commitment-done.js.map
|
|
43
|
+
//# sourceMappingURL=commitment-done.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/commands/commitment-done.ts"],"names":[],"mappings":";;;;AAKA,IAAO,0BAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,yBAAA;AAAA,EACJ,WAAA,EAAa,6BAAA;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,EAAK,GAAI,KAAA,CAAM,KAAA;AACvB,MAAA,IAAI,CAAC,EAAA,EAAI;AACP,QAAA,eAAA,CAAgB,GAAA,EAAK,gBAAA,EAAkB,wCAAA,EAA0C,IAAI,CAAA;AACrF,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,QAAQ,IAAA,EAAK;AAAA,MAC1D;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,UAAA,GAAa,MAAM,cAAA,CAAe,EAAE,IAAI,CAAA;AAC9C,QAAA,IAAI,CAAC,UAAA,EAAY;AACf,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,eAAA,EAAkB,EAAE,CAAA,CAAA,CAAA,IAAO,CAAA;AAAA,UAAE,CAAA,MACpG;AAAC,YAAA,GAAA,CAAI,EAAA,EAAI,KAAA,GAAQ,CAAA,eAAA,EAAkB,EAAE,CAAA,CAAA,CAAG,CAAA;AAAA,UAAE;AAC/C,UAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,WAAA,EAAa,QAAQ,IAAA,EAAK;AAAA,QACvD;AACA,QAAA,IAAI,IAAA,EAAM;AAAC,UAAA,GAAA,CAAI,IAAI,IAAA,GAAO,EAAE,IAAI,IAAA,EAAM,MAAA,EAAQ,YAAY,CAAA;AAAA,QAAE,CAAA,MACvD;AAAC,UAAA,GAAA,CAAI,EAAA,EAAI,IAAA,GAAO,CAAA,OAAA,EAAU,UAAA,CAAW,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,QAAE;AACnD,QAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,UAAA,EAAW;AAAA,MACxC,SAAS,GAAA,EAAK;AACZ,QAAA,GAAA,CAAI,QAAA,CAAS,MAAA,EAAQ,KAAA,GAAQ,gCAAA,EAAkC,GAAA,YAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAC,CAAA;AAClH,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":"commitment-done.js","sourcesContent":["import { defineCommand, handleError, validationError, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { commitmentDone } from '@kb-labs/steward-core';\n\ntype Flags = { json?: boolean };\n\nexport default defineCommand({\n id: 'steward:commitment.done',\n description: 'Mark a commitment fulfilled',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<Flags>) {\n const [id] = input.argv;\n const { json } = input.flags;\n if (!id) {\n validationError(ctx, 'id is required', 'Usage: kb steward commitment done <id>', json);\n return { ok: false, error: 'INVALID_ARGS', result: null };\n }\n\n try {\n const commitment = await commitmentDone({ id });\n if (!commitment) {\n if (json) {ctx.ui?.json?.({ ok: false, error: { code: 'NOT_FOUND', message: `No commitment \"${id}\"` } });}\n else {ctx.ui?.error?.(`No commitment \"${id}\"`);}\n return { ok: false, error: 'NOT_FOUND', result: null };\n }\n if (json) {ctx.ui?.json?.({ ok: true, result: commitment });}\n else {ctx.ui?.info?.(`Done: \"${commitment.text}\"`);}\n return { ok: true, result: commitment };\n } catch (err) {\n ctx.platform.logger?.error?.('steward:commitment.done 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
|
+
reason?: string;
|
|
7
|
+
json?: boolean;
|
|
8
|
+
};
|
|
9
|
+
declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<Flags>, _kb_labs_steward_contracts.Commitment>;
|
|
10
|
+
|
|
11
|
+
export { _default as default };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { defineCommand, validationError, handleError } from '@kb-labs/sdk';
|
|
2
|
+
import { commitmentDrop } from '@kb-labs/steward-core';
|
|
3
|
+
|
|
4
|
+
// src/commands/commitment-drop.ts
|
|
5
|
+
var commitment_drop_default = defineCommand({
|
|
6
|
+
id: "steward:commitment.drop",
|
|
7
|
+
description: "Cancel a commitment \u2014 reason is required and recorded in history",
|
|
8
|
+
handler: {
|
|
9
|
+
async execute(ctx, input) {
|
|
10
|
+
const [id] = input.argv;
|
|
11
|
+
const { reason, json } = input.flags;
|
|
12
|
+
if (!id || !reason?.trim()) {
|
|
13
|
+
validationError(ctx, "id and --reason are required", "Usage: kb steward commitment drop <id> --reason=...", json);
|
|
14
|
+
return { ok: false, error: "INVALID_ARGS", result: null };
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
const commitment = await commitmentDrop({ id, reason });
|
|
18
|
+
if (!commitment) {
|
|
19
|
+
if (json) {
|
|
20
|
+
ctx.ui?.json?.({ ok: false, error: { code: "NOT_FOUND", message: `No commitment "${id}"` } });
|
|
21
|
+
} else {
|
|
22
|
+
ctx.ui?.error?.(`No commitment "${id}"`);
|
|
23
|
+
}
|
|
24
|
+
return { ok: false, error: "NOT_FOUND", result: null };
|
|
25
|
+
}
|
|
26
|
+
if (json) {
|
|
27
|
+
ctx.ui?.json?.({ ok: true, result: commitment });
|
|
28
|
+
} else {
|
|
29
|
+
ctx.ui?.info?.(`Dropped: "${commitment.text}" (${reason})`);
|
|
30
|
+
}
|
|
31
|
+
return { ok: true, result: commitment };
|
|
32
|
+
} catch (err) {
|
|
33
|
+
ctx.platform.logger?.error?.("steward:commitment.drop 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 { commitment_drop_default as default };
|
|
42
|
+
//# sourceMappingURL=commitment-drop.js.map
|
|
43
|
+
//# sourceMappingURL=commitment-drop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/commands/commitment-drop.ts"],"names":[],"mappings":";;;;AAKA,IAAO,0BAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,yBAAA;AAAA,EACJ,WAAA,EAAa,uEAAA;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,MAAA,EAAQ,IAAA,EAAK,GAAI,KAAA,CAAM,KAAA;AAC/B,MAAA,IAAI,CAAC,EAAA,IAAM,CAAC,MAAA,EAAQ,MAAK,EAAG;AAC1B,QAAA,eAAA,CAAgB,GAAA,EAAK,8BAAA,EAAgC,qDAAA,EAAuD,IAAI,CAAA;AAChH,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,QAAQ,IAAA,EAAK;AAAA,MAC1D;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,aAAa,MAAM,cAAA,CAAe,EAAE,EAAA,EAAI,QAAQ,CAAA;AACtD,QAAA,IAAI,CAAC,UAAA,EAAY;AACf,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,eAAA,EAAkB,EAAE,CAAA,CAAA,CAAA,IAAO,CAAA;AAAA,UAAE,CAAA,MACpG;AAAC,YAAA,GAAA,CAAI,EAAA,EAAI,KAAA,GAAQ,CAAA,eAAA,EAAkB,EAAE,CAAA,CAAA,CAAG,CAAA;AAAA,UAAE;AAC/C,UAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,WAAA,EAAa,QAAQ,IAAA,EAAK;AAAA,QACvD;AACA,QAAA,IAAI,IAAA,EAAM;AAAC,UAAA,GAAA,CAAI,IAAI,IAAA,GAAO,EAAE,IAAI,IAAA,EAAM,MAAA,EAAQ,YAAY,CAAA;AAAA,QAAE,CAAA,MACvD;AAAC,UAAA,GAAA,CAAI,IAAI,IAAA,GAAO,CAAA,UAAA,EAAa,WAAW,IAAI,CAAA,GAAA,EAAM,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,QAAE;AAClE,QAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,UAAA,EAAW;AAAA,MACxC,SAAS,GAAA,EAAK;AACZ,QAAA,GAAA,CAAI,QAAA,CAAS,MAAA,EAAQ,KAAA,GAAQ,gCAAA,EAAkC,GAAA,YAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAC,CAAA;AAClH,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":"commitment-drop.js","sourcesContent":["import { defineCommand, handleError, validationError, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { commitmentDrop } from '@kb-labs/steward-core';\n\ntype Flags = { reason?: string; json?: boolean };\n\nexport default defineCommand({\n id: 'steward:commitment.drop',\n description: 'Cancel a commitment — reason is required and recorded in history',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<Flags>) {\n const [id] = input.argv;\n const { reason, json } = input.flags;\n if (!id || !reason?.trim()) {\n validationError(ctx, 'id and --reason are required', 'Usage: kb steward commitment drop <id> --reason=...', json);\n return { ok: false, error: 'INVALID_ARGS', result: null };\n }\n\n try {\n const commitment = await commitmentDrop({ id, reason });\n if (!commitment) {\n if (json) {ctx.ui?.json?.({ ok: false, error: { code: 'NOT_FOUND', message: `No commitment \"${id}\"` } });}\n else {ctx.ui?.error?.(`No commitment \"${id}\"`);}\n return { ok: false, error: 'NOT_FOUND', result: null };\n }\n if (json) {ctx.ui?.json?.({ ok: true, result: commitment });}\n else {ctx.ui?.info?.(`Dropped: \"${commitment.text}\" (${reason})`);}\n return { ok: true, result: commitment };\n } catch (err) {\n ctx.platform.logger?.error?.('steward:commitment.drop 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
|
+
status?: string;
|
|
7
|
+
project?: string;
|
|
8
|
+
'stale-only'?: boolean;
|
|
9
|
+
json?: boolean;
|
|
10
|
+
};
|
|
11
|
+
declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<Flags>, _kb_labs_steward_contracts.Commitment[]>;
|
|
12
|
+
|
|
13
|
+
export { _default as default };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { defineCommand, handleError } from '@kb-labs/sdk';
|
|
2
|
+
import { listCommitments } from '@kb-labs/steward-core';
|
|
3
|
+
|
|
4
|
+
// src/commands/commitment-list.ts
|
|
5
|
+
var commitment_list_default = defineCommand({
|
|
6
|
+
id: "steward:commitment.list",
|
|
7
|
+
description: "List commitments, optionally only the stale (overdue, unsnoozed) ones",
|
|
8
|
+
handler: {
|
|
9
|
+
async execute(ctx, input) {
|
|
10
|
+
const { status, project, json } = input.flags;
|
|
11
|
+
const staleOnly = input.flags["stale-only"] ?? false;
|
|
12
|
+
try {
|
|
13
|
+
const commitments = await listCommitments({
|
|
14
|
+
status,
|
|
15
|
+
projectId: project,
|
|
16
|
+
staleOnly
|
|
17
|
+
});
|
|
18
|
+
if (json) {
|
|
19
|
+
ctx.ui?.json?.({ ok: true, result: commitments });
|
|
20
|
+
} else if (commitments.length === 0) {
|
|
21
|
+
ctx.ui?.info?.("Nothing here.");
|
|
22
|
+
} else {
|
|
23
|
+
ctx.ui?.chain?.(commitments.map((c) => ({ title: `[${c.status}] ${c.text}`, sections: [{ items: [c.id] }] })));
|
|
24
|
+
}
|
|
25
|
+
return { ok: true, result: commitments };
|
|
26
|
+
} catch (err) {
|
|
27
|
+
ctx.platform.logger?.error?.("steward:commitment.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 { commitment_list_default as default };
|
|
36
|
+
//# sourceMappingURL=commitment-list.js.map
|
|
37
|
+
//# sourceMappingURL=commitment-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/commands/commitment-list.ts"],"names":[],"mappings":";;;;AAKA,IAAO,0BAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,yBAAA;AAAA,EACJ,WAAA,EAAa,uEAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAwB;AAC1D,MAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAS,IAAA,KAAS,KAAA,CAAM,KAAA;AACxC,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,CAAM,YAAY,CAAA,IAAK,KAAA;AAC/C,MAAA,IAAI;AACF,QAAA,MAAM,WAAA,GAAc,MAAM,eAAA,CAAgB;AAAA,UACxC,MAAA;AAAA,UACA,SAAA,EAAW,OAAA;AAAA,UACX;AAAA,SACD,CAAA;AACD,QAAA,IAAI,IAAA,EAAM;AAAC,UAAA,GAAA,CAAI,IAAI,IAAA,GAAO,EAAE,IAAI,IAAA,EAAM,MAAA,EAAQ,aAAa,CAAA;AAAA,QAAE,CAAA,MAAA,IACpD,WAAA,CAAY,MAAA,KAAW,CAAA,EAAG;AAAC,UAAA,GAAA,CAAI,EAAA,EAAI,OAAO,eAAe,CAAA;AAAA,QAAE,CAAA,MAC/D;AAAC,UAAA,GAAA,CAAI,EAAA,EAAI,KAAA,GAAQ,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,KAAA,EAAO,CAAA,CAAA,EAAI,CAAA,CAAE,MAAM,CAAA,EAAA,EAAK,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,QAAA,EAAU,CAAC,EAAE,KAAA,EAAO,CAAC,CAAA,CAAE,EAAE,CAAA,EAAG,CAAA,EAAE,CAAE,CAAC,CAAA;AAAA,QAAE;AACrH,QAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,WAAA,EAAY;AAAA,MACzC,SAAS,GAAA,EAAK;AACZ,QAAA,GAAA,CAAI,QAAA,CAAS,MAAA,EAAQ,KAAA,GAAQ,gCAAA,EAAkC,GAAA,YAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAC,CAAA;AAClH,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":"commitment-list.js","sourcesContent":["import { defineCommand, handleError, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { listCommitments } from '@kb-labs/steward-core';\n\ntype Flags = { status?: string; project?: string; 'stale-only'?: boolean; json?: boolean };\n\nexport default defineCommand({\n id: 'steward:commitment.list',\n description: 'List commitments, optionally only the stale (overdue, unsnoozed) ones',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<Flags>) {\n const { status, project, json } = input.flags;\n const staleOnly = input.flags['stale-only'] ?? false;\n try {\n const commitments = await listCommitments({\n status: status as 'open' | 'done' | 'dropped' | undefined,\n projectId: project,\n staleOnly,\n });\n if (json) {ctx.ui?.json?.({ ok: true, result: commitments });}\n else if (commitments.length === 0) {ctx.ui?.info?.('Nothing here.');}\n else {ctx.ui?.chain?.(commitments.map((c) => ({ title: `[${c.status}] ${c.text}`, sections: [{ items: [c.id] }] })));}\n return { ok: true, result: commitments };\n } catch (err) {\n ctx.platform.logger?.error?.('steward:commitment.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
|
+
until?: string;
|
|
7
|
+
reason?: string;
|
|
8
|
+
json?: boolean;
|
|
9
|
+
};
|
|
10
|
+
declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<Flags>, _kb_labs_steward_contracts.Commitment>;
|
|
11
|
+
|
|
12
|
+
export { _default as default };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { defineCommand, validationError, handleError } from '@kb-labs/sdk';
|
|
2
|
+
import { commitmentSnooze } from '@kb-labs/steward-core';
|
|
3
|
+
|
|
4
|
+
// src/commands/commitment-snooze.ts
|
|
5
|
+
|
|
6
|
+
// src/utils/flags.ts
|
|
7
|
+
function parseDate(value) {
|
|
8
|
+
const ms = Date.parse(value);
|
|
9
|
+
if (Number.isNaN(ms)) {
|
|
10
|
+
throw new Error(`Invalid date: "${value}" \u2014 expected ISO 8601 (e.g. 2026-09-01)`);
|
|
11
|
+
}
|
|
12
|
+
return ms;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// src/commands/commitment-snooze.ts
|
|
16
|
+
var commitment_snooze_default = defineCommand({
|
|
17
|
+
id: "steward:commitment.snooze",
|
|
18
|
+
description: "Postpone a commitment's reminder without cancelling it",
|
|
19
|
+
handler: {
|
|
20
|
+
async execute(ctx, input) {
|
|
21
|
+
const [id] = input.argv;
|
|
22
|
+
const { until, reason, json } = input.flags;
|
|
23
|
+
if (!id || !until?.trim()) {
|
|
24
|
+
validationError(ctx, "id and --until are required", "Usage: kb steward commitment snooze <id> --until=...", json);
|
|
25
|
+
return { ok: false, error: "INVALID_ARGS", result: null };
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
const commitment = await commitmentSnooze({ id, until: parseDate(until), reason });
|
|
29
|
+
if (!commitment) {
|
|
30
|
+
if (json) {
|
|
31
|
+
ctx.ui?.json?.({ ok: false, error: { code: "NOT_FOUND", message: `No commitment "${id}"` } });
|
|
32
|
+
} else {
|
|
33
|
+
ctx.ui?.error?.(`No commitment "${id}"`);
|
|
34
|
+
}
|
|
35
|
+
return { ok: false, error: "NOT_FOUND", result: null };
|
|
36
|
+
}
|
|
37
|
+
if (json) {
|
|
38
|
+
ctx.ui?.json?.({ ok: true, result: commitment });
|
|
39
|
+
} else {
|
|
40
|
+
ctx.ui?.info?.(`Snoozed "${commitment.text}" until ${until}`);
|
|
41
|
+
}
|
|
42
|
+
return { ok: true, result: commitment };
|
|
43
|
+
} catch (err) {
|
|
44
|
+
ctx.platform.logger?.error?.("steward:commitment.snooze failed", err instanceof Error ? err : new Error(String(err)));
|
|
45
|
+
handleError(ctx, err, json);
|
|
46
|
+
return { ok: false, error: err instanceof Error ? err.message : String(err), result: null };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
export { commitment_snooze_default as default };
|
|
53
|
+
//# sourceMappingURL=commitment-snooze.js.map
|
|
54
|
+
//# sourceMappingURL=commitment-snooze.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/flags.ts","../../src/commands/commitment-snooze.ts"],"names":[],"mappings":";;;;;;AAUO,SAAS,UAAU,KAAA,EAAuB;AAC/C,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAC3B,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,EAAE,CAAA,EAAG;AACpB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,KAAK,CAAA,4CAAA,CAAyC,CAAA;AAAA,EAClF;AACA,EAAA,OAAO,EAAA;AACT;;;ACVA,IAAO,4BAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,2BAAA;AAAA,EACJ,WAAA,EAAa,wDAAA;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,KAAA,EAAO,MAAA,EAAQ,IAAA,KAAS,KAAA,CAAM,KAAA;AACtC,MAAA,IAAI,CAAC,EAAA,IAAM,CAAC,KAAA,EAAO,MAAK,EAAG;AACzB,QAAA,eAAA,CAAgB,GAAA,EAAK,6BAAA,EAA+B,sDAAA,EAAwD,IAAI,CAAA;AAChH,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,QAAQ,IAAA,EAAK;AAAA,MAC1D;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,UAAA,GAAa,MAAM,gBAAA,CAAiB,EAAE,EAAA,EAAI,OAAO,SAAA,CAAU,KAAK,CAAA,EAAG,MAAA,EAAQ,CAAA;AACjF,QAAA,IAAI,CAAC,UAAA,EAAY;AACf,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,eAAA,EAAkB,EAAE,CAAA,CAAA,CAAA,IAAO,CAAA;AAAA,UAAE,CAAA,MACpG;AAAC,YAAA,GAAA,CAAI,EAAA,EAAI,KAAA,GAAQ,CAAA,eAAA,EAAkB,EAAE,CAAA,CAAA,CAAG,CAAA;AAAA,UAAE;AAC/C,UAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,WAAA,EAAa,QAAQ,IAAA,EAAK;AAAA,QACvD;AACA,QAAA,IAAI,IAAA,EAAM;AAAC,UAAA,GAAA,CAAI,IAAI,IAAA,GAAO,EAAE,IAAI,IAAA,EAAM,MAAA,EAAQ,YAAY,CAAA;AAAA,QAAE,CAAA,MACvD;AAAC,UAAA,GAAA,CAAI,IAAI,IAAA,GAAO,CAAA,SAAA,EAAY,WAAW,IAAI,CAAA,QAAA,EAAW,KAAK,CAAA,CAAE,CAAA;AAAA,QAAE;AACpE,QAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,UAAA,EAAW;AAAA,MACxC,SAAS,GAAA,EAAK;AACZ,QAAA,GAAA,CAAI,QAAA,CAAS,MAAA,EAAQ,KAAA,GAAQ,kCAAA,EAAoC,GAAA,YAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAC,CAAA;AACpH,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":"commitment-snooze.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 { commitmentSnooze } from '@kb-labs/steward-core';\nimport { parseDate } from '../utils/flags.js';\n\ntype Flags = { until?: string; reason?: string; json?: boolean };\n\nexport default defineCommand({\n id: 'steward:commitment.snooze',\n description: \"Postpone a commitment's reminder without cancelling it\",\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<Flags>) {\n const [id] = input.argv;\n const { until, reason, json } = input.flags;\n if (!id || !until?.trim()) {\n validationError(ctx, 'id and --until are required', 'Usage: kb steward commitment snooze <id> --until=...', json);\n return { ok: false, error: 'INVALID_ARGS', result: null };\n }\n\n try {\n const commitment = await commitmentSnooze({ id, until: parseDate(until), reason });\n if (!commitment) {\n if (json) {ctx.ui?.json?.({ ok: false, error: { code: 'NOT_FOUND', message: `No commitment \"${id}\"` } });}\n else {ctx.ui?.error?.(`No commitment \"${id}\"`);}\n return { ok: false, error: 'NOT_FOUND', result: null };\n }\n if (json) {ctx.ui?.json?.({ ok: true, result: commitment });}\n else {ctx.ui?.info?.(`Snoozed \"${commitment.text}\" until ${until}`);}\n return { ok: true, result: commitment };\n } catch (err) {\n ctx.platform.logger?.error?.('steward:commitment.snooze 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
|
+
name?: string;
|
|
7
|
+
json?: boolean;
|
|
8
|
+
};
|
|
9
|
+
declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<Flags>, _kb_labs_steward_contracts.Company>;
|
|
10
|
+
|
|
11
|
+
export { _default as default };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { defineCommand, validationError, handleError } from '@kb-labs/sdk';
|
|
2
|
+
import { addCompany } from '@kb-labs/steward-core';
|
|
3
|
+
|
|
4
|
+
// src/commands/company-add.ts
|
|
5
|
+
var company_add_default = defineCommand({
|
|
6
|
+
id: "steward:company.add",
|
|
7
|
+
description: "Add a company (thin \u2014 just a name to link people to)",
|
|
8
|
+
handler: {
|
|
9
|
+
async execute(ctx, input) {
|
|
10
|
+
const { name, 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 company = await addCompany({ name });
|
|
17
|
+
if (json) {
|
|
18
|
+
ctx.ui?.json?.({ ok: true, result: company });
|
|
19
|
+
} else {
|
|
20
|
+
ctx.ui?.info?.(`Added company "${company.name}" (${company.id})`);
|
|
21
|
+
}
|
|
22
|
+
return { ok: true, result: company };
|
|
23
|
+
} catch (err) {
|
|
24
|
+
ctx.platform.logger?.error?.("steward:company.add 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 { company_add_default as default };
|
|
33
|
+
//# sourceMappingURL=company-add.js.map
|
|
34
|
+
//# sourceMappingURL=company-add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/commands/company-add.ts"],"names":[],"mappings":";;;;AAKA,IAAO,sBAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,qBAAA;AAAA,EACJ,WAAA,EAAa,2DAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAwB;AAC1D,MAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,KAAA,CAAM,KAAA;AAC7B,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,EAAE,MAAM,CAAA;AACzC,QAAA,IAAI,IAAA,EAAM;AAAC,UAAA,GAAA,CAAI,IAAI,IAAA,GAAO,EAAE,IAAI,IAAA,EAAM,MAAA,EAAQ,SAAS,CAAA;AAAA,QAAE,CAAA,MACpD;AAAC,UAAA,GAAA,CAAI,EAAA,EAAI,OAAO,CAAA,eAAA,EAAkB,OAAA,CAAQ,IAAI,CAAA,GAAA,EAAM,OAAA,CAAQ,EAAE,CAAA,CAAA,CAAG,CAAA;AAAA,QAAE;AACxE,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":"company-add.js","sourcesContent":["import { defineCommand, handleError, validationError, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { addCompany } from '@kb-labs/steward-core';\n\ntype Flags = { name?: string; json?: boolean };\n\nexport default defineCommand({\n id: 'steward:company.add',\n description: 'Add a company (thin — just a name to link people to)',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<Flags>) {\n const { name, 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 company = await addCompany({ name });\n if (json) {ctx.ui?.json?.({ ok: true, result: company });}\n else {ctx.ui?.info?.(`Added company \"${company.name}\" (${company.id})`);}\n return { ok: true, result: company };\n } catch (err) {\n ctx.platform.logger?.error?.('steward:company.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.Company[]>;
|
|
9
|
+
|
|
10
|
+
export { _default as default };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { defineCommand, handleError } from '@kb-labs/sdk';
|
|
2
|
+
import { listCompanies } from '@kb-labs/steward-core';
|
|
3
|
+
|
|
4
|
+
// src/commands/company-list.ts
|
|
5
|
+
var company_list_default = defineCommand({
|
|
6
|
+
id: "steward:company.list",
|
|
7
|
+
description: "List companies",
|
|
8
|
+
handler: {
|
|
9
|
+
async execute(ctx, input) {
|
|
10
|
+
const { json } = input.flags;
|
|
11
|
+
try {
|
|
12
|
+
const companies = await listCompanies();
|
|
13
|
+
if (json) {
|
|
14
|
+
ctx.ui?.json?.({ ok: true, result: companies });
|
|
15
|
+
} else if (companies.length === 0) {
|
|
16
|
+
ctx.ui?.info?.("No companies yet.");
|
|
17
|
+
} else {
|
|
18
|
+
ctx.ui?.chain?.(companies.map((c) => ({ title: c.name, sections: [{ items: [c.id] }] })));
|
|
19
|
+
}
|
|
20
|
+
return { ok: true, result: companies };
|
|
21
|
+
} catch (err) {
|
|
22
|
+
ctx.platform.logger?.error?.("steward:company.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 { company_list_default as default };
|
|
31
|
+
//# sourceMappingURL=company-list.js.map
|
|
32
|
+
//# sourceMappingURL=company-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/commands/company-list.ts"],"names":[],"mappings":";;;;AAKA,IAAO,uBAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,sBAAA;AAAA,EACJ,WAAA,EAAa,gBAAA;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,SAAA,GAAY,MAAM,aAAA,EAAc;AACtC,QAAA,IAAI,IAAA,EAAM;AAAC,UAAA,GAAA,CAAI,IAAI,IAAA,GAAO,EAAE,IAAI,IAAA,EAAM,MAAA,EAAQ,WAAW,CAAA;AAAA,QAAE,CAAA,MAAA,IAClD,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG;AAAC,UAAA,GAAA,CAAI,EAAA,EAAI,OAAO,mBAAmB,CAAA;AAAA,QAAE,CAAA,MACjE;AAAC,UAAA,GAAA,CAAI,EAAA,EAAI,QAAQ,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,OAAO,CAAA,CAAE,IAAA,EAAM,UAAU,CAAC,EAAE,OAAO,CAAC,CAAA,CAAE,EAAE,CAAA,EAAG,CAAA,EAAE,CAAE,CAAC,CAAA;AAAA,QAAE;AAChG,QAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,SAAA,EAAU;AAAA,MACvC,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":"company-list.js","sourcesContent":["import { defineCommand, handleError, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { listCompanies } from '@kb-labs/steward-core';\n\ntype Flags = { json?: boolean };\n\nexport default defineCommand({\n id: 'steward:company.list',\n description: 'List companies',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<Flags>) {\n const { json } = input.flags;\n try {\n const companies = await listCompanies();\n if (json) {ctx.ui?.json?.({ ok: true, result: companies });}\n else if (companies.length === 0) {ctx.ui?.info?.('No companies yet.');}\n else {ctx.ui?.chain?.(companies.map((c) => ({ title: c.name, sections: [{ items: [c.id] }] })));}\n return { ok: true, result: companies };\n } catch (err) {\n ctx.platform.logger?.error?.('steward:company.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,14 @@
|
|
|
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
|
+
'subject-type'?: string;
|
|
7
|
+
'subject-id'?: string;
|
|
8
|
+
text?: string;
|
|
9
|
+
kind?: string;
|
|
10
|
+
json?: boolean;
|
|
11
|
+
};
|
|
12
|
+
declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<Flags>, _kb_labs_steward_contracts.Event>;
|
|
13
|
+
|
|
14
|
+
export { _default as default };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { defineCommand, validationError, handleError } from '@kb-labs/sdk';
|
|
2
|
+
import { addEvent } from '@kb-labs/steward-core';
|
|
3
|
+
|
|
4
|
+
// src/commands/event-add.ts
|
|
5
|
+
var SUBJECT_TYPES = ["project", "person", "commitment", "company", "resource"];
|
|
6
|
+
var event_add_default = defineCommand({
|
|
7
|
+
id: "steward:event.add",
|
|
8
|
+
description: "Record a manual note against a project, person, or commitment \u2014 the primary tool for backfill import",
|
|
9
|
+
handler: {
|
|
10
|
+
async execute(ctx, input) {
|
|
11
|
+
const subjectType = input.flags["subject-type"];
|
|
12
|
+
const subjectId = input.flags["subject-id"];
|
|
13
|
+
const { text, kind, json } = input.flags;
|
|
14
|
+
if (!subjectType || !SUBJECT_TYPES.includes(subjectType)) {
|
|
15
|
+
validationError(ctx, `--subject-type must be one of: ${SUBJECT_TYPES.join(", ")}`, void 0, json);
|
|
16
|
+
return { ok: false, error: "INVALID_ARGS", result: null };
|
|
17
|
+
}
|
|
18
|
+
if (!subjectId) {
|
|
19
|
+
validationError(ctx, "--subject-id is required", void 0, json);
|
|
20
|
+
return { ok: false, error: "INVALID_ARGS", result: null };
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
const event = await addEvent({
|
|
24
|
+
subjectType,
|
|
25
|
+
subjectId,
|
|
26
|
+
text,
|
|
27
|
+
kind: kind ?? "note"
|
|
28
|
+
});
|
|
29
|
+
if (json) {
|
|
30
|
+
ctx.ui?.json?.({ ok: true, result: event });
|
|
31
|
+
} else {
|
|
32
|
+
ctx.ui?.info?.(`Recorded event "${event.kind}" on ${subjectType}:${subjectId}`);
|
|
33
|
+
}
|
|
34
|
+
return { ok: true, result: event };
|
|
35
|
+
} catch (err) {
|
|
36
|
+
ctx.platform.logger?.error?.("steward:event.add failed", err instanceof Error ? err : new Error(String(err)));
|
|
37
|
+
handleError(ctx, err, json);
|
|
38
|
+
return { ok: false, error: err instanceof Error ? err.message : String(err), result: null };
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
export { event_add_default as default };
|
|
45
|
+
//# sourceMappingURL=event-add.js.map
|
|
46
|
+
//# sourceMappingURL=event-add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/commands/event-add.ts"],"names":[],"mappings":";;;;AAKA,IAAM,gBAAgB,CAAC,SAAA,EAAW,QAAA,EAAU,YAAA,EAAc,WAAW,UAAU,CAAA;AAE/E,IAAO,oBAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,mBAAA;AAAA,EACJ,WAAA,EAAa,2GAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAwB;AAC1D,MAAA,MAAM,WAAA,GAAc,KAAA,CAAM,KAAA,CAAM,cAAc,CAAA;AAC9C,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,CAAM,YAAY,CAAA;AAC1C,MAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,KAAS,KAAA,CAAM,KAAA;AAEnC,MAAA,IAAI,CAAC,WAAA,IAAe,CAAC,aAAA,CAAc,QAAA,CAAS,WAA6C,CAAA,EAAG;AAC1F,QAAA,eAAA,CAAgB,GAAA,EAAK,kCAAkC,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAI,QAAW,IAAI,CAAA;AAClG,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,QAAQ,IAAA,EAAK;AAAA,MAC1D;AACA,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,eAAA,CAAgB,GAAA,EAAK,0BAAA,EAA4B,MAAA,EAAW,IAAI,CAAA;AAChE,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,QAAQ,IAAA,EAAK;AAAA,MAC1D;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,CAAS;AAAA,UAC3B,WAAA;AAAA,UACA,SAAA;AAAA,UACA,IAAA;AAAA,UACA,MAAM,IAAA,IAAQ;AAAA,SACf,CAAA;AACD,QAAA,IAAI,IAAA,EAAM;AAAC,UAAA,GAAA,CAAI,IAAI,IAAA,GAAO,EAAE,IAAI,IAAA,EAAM,MAAA,EAAQ,OAAO,CAAA;AAAA,QAAE,CAAA,MAClD;AAAC,UAAA,GAAA,CAAI,EAAA,EAAI,OAAO,CAAA,gBAAA,EAAmB,KAAA,CAAM,IAAI,CAAA,KAAA,EAAQ,WAAW,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAA;AAAA,QAAE;AACtF,QAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAM;AAAA,MACnC,SAAS,GAAA,EAAK;AACZ,QAAA,GAAA,CAAI,QAAA,CAAS,MAAA,EAAQ,KAAA,GAAQ,0BAAA,EAA4B,GAAA,YAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAC,CAAA;AAC5G,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":"event-add.js","sourcesContent":["import { defineCommand, handleError, validationError, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { addEvent } from '@kb-labs/steward-core';\n\ntype Flags = { 'subject-type'?: string; 'subject-id'?: string; text?: string; kind?: string; json?: boolean };\n\nconst SUBJECT_TYPES = ['project', 'person', 'commitment', 'company', 'resource'] as const;\n\nexport default defineCommand({\n id: 'steward:event.add',\n description: 'Record a manual note against a project, person, or commitment — the primary tool for backfill import',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<Flags>) {\n const subjectType = input.flags['subject-type'];\n const subjectId = input.flags['subject-id'];\n const { text, kind, json } = input.flags;\n\n if (!subjectType || !SUBJECT_TYPES.includes(subjectType as (typeof SUBJECT_TYPES)[number])) {\n validationError(ctx, `--subject-type must be one of: ${SUBJECT_TYPES.join(', ')}`, undefined, json);\n return { ok: false, error: 'INVALID_ARGS', result: null };\n }\n if (!subjectId) {\n validationError(ctx, '--subject-id is required', undefined, json);\n return { ok: false, error: 'INVALID_ARGS', result: null };\n }\n\n try {\n const event = await addEvent({\n subjectType: subjectType as (typeof SUBJECT_TYPES)[number],\n subjectId,\n text,\n kind: kind ?? 'note',\n });\n if (json) {ctx.ui?.json?.({ ok: true, result: event });}\n else {ctx.ui?.info?.(`Recorded event \"${event.kind}\" on ${subjectType}:${subjectId}`);}\n return { ok: true, result: event };\n } catch (err) {\n ctx.platform.logger?.error?.('steward:event.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,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
|
+
'subject-type'?: string;
|
|
7
|
+
'subject-id'?: string;
|
|
8
|
+
kind?: string;
|
|
9
|
+
json?: boolean;
|
|
10
|
+
};
|
|
11
|
+
declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<Flags>, _kb_labs_steward_contracts.Event[]>;
|
|
12
|
+
|
|
13
|
+
export { _default as default };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { defineCommand, handleError } from '@kb-labs/sdk';
|
|
2
|
+
import { listEvents } from '@kb-labs/steward-core';
|
|
3
|
+
|
|
4
|
+
// src/commands/event-list.ts
|
|
5
|
+
var event_list_default = defineCommand({
|
|
6
|
+
id: "steward:event.list",
|
|
7
|
+
description: 'Read the history log for a subject \u2014 "what happened with X"',
|
|
8
|
+
handler: {
|
|
9
|
+
async execute(ctx, input) {
|
|
10
|
+
const { json, kind } = input.flags;
|
|
11
|
+
const subjectType = input.flags["subject-type"];
|
|
12
|
+
const subjectId = input.flags["subject-id"];
|
|
13
|
+
try {
|
|
14
|
+
const events = await listEvents({
|
|
15
|
+
subjectType,
|
|
16
|
+
subjectId,
|
|
17
|
+
kind
|
|
18
|
+
});
|
|
19
|
+
if (json) {
|
|
20
|
+
ctx.ui?.json?.({ ok: true, result: events });
|
|
21
|
+
} else if (events.length === 0) {
|
|
22
|
+
ctx.ui?.info?.("No events yet.");
|
|
23
|
+
} else {
|
|
24
|
+
ctx.ui?.chain?.(events.map((e) => ({ title: `[${e.kind}] ${new Date(e.at).toISOString()}`, sections: [{ items: [e.text ?? e.reason ?? "(no text)"] }] })));
|
|
25
|
+
}
|
|
26
|
+
return { ok: true, result: events };
|
|
27
|
+
} catch (err) {
|
|
28
|
+
ctx.platform.logger?.error?.("steward:event.list 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 { event_list_default as default };
|
|
37
|
+
//# sourceMappingURL=event-list.js.map
|
|
38
|
+
//# sourceMappingURL=event-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/commands/event-list.ts"],"names":[],"mappings":";;;;AAKA,IAAO,qBAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,oBAAA;AAAA,EACJ,WAAA,EAAa,kEAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAwB;AAC1D,MAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,KAAA,CAAM,KAAA;AAC7B,MAAA,MAAM,WAAA,GAAc,KAAA,CAAM,KAAA,CAAM,cAAc,CAAA;AAC9C,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,CAAM,YAAY,CAAA;AAC1C,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,UAAA,CAAW;AAAA,UAC9B,WAAA;AAAA,UACA,SAAA;AAAA,UACA;AAAA,SACD,CAAA;AACD,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,gBAAgB,CAAA;AAAA,QAAE,CAAA,MAC3D;AAAC,UAAA,GAAA,CAAI,EAAA,EAAI,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,KAAA,EAAO,CAAA,CAAA,EAAI,EAAE,IAAI,CAAA,EAAA,EAAK,IAAI,IAAA,CAAK,EAAE,EAAE,CAAA,CAAE,WAAA,EAAa,CAAA,CAAA,EAAI,QAAA,EAAU,CAAC,EAAE,OAAO,CAAC,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAE,UAAU,WAAW,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA;AAAA,QAAE;AACjK,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":"event-list.js","sourcesContent":["import { defineCommand, handleError, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { listEvents } from '@kb-labs/steward-core';\n\ntype Flags = { 'subject-type'?: string; 'subject-id'?: string; kind?: string; json?: boolean };\n\nexport default defineCommand({\n id: 'steward:event.list',\n description: 'Read the history log for a subject — \"what happened with X\"',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<Flags>) {\n const { json, kind } = input.flags;\n const subjectType = input.flags['subject-type'];\n const subjectId = input.flags['subject-id'];\n try {\n const events = await listEvents({\n subjectType: subjectType as 'project' | 'person' | 'commitment' | 'company' | 'resource' | undefined,\n subjectId,\n kind,\n });\n if (json) {ctx.ui?.json?.({ ok: true, result: events });}\n else if (events.length === 0) {ctx.ui?.info?.('No events yet.');}\n else {ctx.ui?.chain?.(events.map((e) => ({ title: `[${e.kind}] ${new Date(e.at).toISOString()}`, sections: [{ items: [e.text ?? e.reason ?? '(no text)'] }] })));}\n return { ok: true, result: events };\n } catch (err) {\n ctx.platform.logger?.error?.('steward:event.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,15 @@
|
|
|
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
|
+
person?: string;
|
|
7
|
+
project?: string;
|
|
8
|
+
role?: string;
|
|
9
|
+
topics?: string;
|
|
10
|
+
priority?: number;
|
|
11
|
+
json?: boolean;
|
|
12
|
+
};
|
|
13
|
+
declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<Flags>, _kb_labs_steward_contracts.ProjectMember>;
|
|
14
|
+
|
|
15
|
+
export { _default as default };
|