@kb-labs/shared 1.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.
- package/.cursorrules +32 -0
- package/.github/workflows/ci.yml +13 -0
- package/.github/workflows/deploy.yml +28 -0
- package/.github/workflows/docker-build.yml +25 -0
- package/.github/workflows/drift-check.yml +10 -0
- package/.github/workflows/profiles-validate.yml +16 -0
- package/.github/workflows/release.yml +8 -0
- package/.kb/devkit/agents/devkit-maintainer/context.globs +15 -0
- package/.kb/devkit/agents/devkit-maintainer/permissions.yml +17 -0
- package/.kb/devkit/agents/devkit-maintainer/prompt.md +28 -0
- package/.kb/devkit/agents/devkit-maintainer/runbook.md +31 -0
- package/.kb/devkit/agents/docs-crafter/prompt.md +24 -0
- package/.kb/devkit/agents/docs-crafter/runbook.md +18 -0
- package/.kb/devkit/agents/release-manager/context.globs +7 -0
- package/.kb/devkit/agents/release-manager/prompt.md +27 -0
- package/.kb/devkit/agents/release-manager/runbook.md +17 -0
- package/.kb/devkit/agents/test-generator/context.globs +7 -0
- package/.kb/devkit/agents/test-generator/prompt.md +27 -0
- package/.kb/devkit/agents/test-generator/runbook.md +18 -0
- package/.vscode/settings.json +23 -0
- package/CHANGELOG.md +33 -0
- package/CONTRIBUTING.md +117 -0
- package/LICENSE +21 -0
- package/README.md +306 -0
- package/docs/DECLARATIVE-FLAGS-AND-ENV.md +622 -0
- package/docs/DOCUMENTATION.md +70 -0
- package/docs/adr/0000-template.md +52 -0
- package/docs/adr/0001-architecture-and-repository-layout.md +31 -0
- package/docs/adr/0002-plugins-and-extensibility.md +44 -0
- package/docs/adr/0003-package-and-module-boundaries.md +35 -0
- package/docs/adr/0004-versioning-and-release-policy.md +36 -0
- package/docs/adr/0005-reactive-loader-pattern.md +179 -0
- package/docs/adr/0006-declarative-flags-and-env-systems.md +376 -0
- package/eslint.config.js +27 -0
- package/kb-labs.config.json +5 -0
- package/package.json +88 -0
- package/package.json.bin +25 -0
- package/package.json.lib +30 -0
- package/packages/shared-cli-ui/CHANGELOG.md +20 -0
- package/packages/shared-cli-ui/README.md +342 -0
- package/packages/shared-cli-ui/docs/ARCHITECTURE.md +105 -0
- package/packages/shared-cli-ui/eslint.config.js +27 -0
- package/packages/shared-cli-ui/package.json +72 -0
- package/packages/shared-cli-ui/src/__tests__/artifacts-display.spec.ts +89 -0
- package/packages/shared-cli-ui/src/__tests__/format.spec.ts +44 -0
- package/packages/shared-cli-ui/src/__tests__/loader-json-mode.test.ts +119 -0
- package/packages/shared-cli-ui/src/artifacts-display.ts +266 -0
- package/packages/shared-cli-ui/src/cli-auto-discovery.ts +120 -0
- package/packages/shared-cli-ui/src/colors.ts +142 -0
- package/packages/shared-cli-ui/src/command-discovery.ts +72 -0
- package/packages/shared-cli-ui/src/command-output.ts +153 -0
- package/packages/shared-cli-ui/src/command-result.ts +267 -0
- package/packages/shared-cli-ui/src/command-runner.ts +310 -0
- package/packages/shared-cli-ui/src/command-suggestions.ts +204 -0
- package/packages/shared-cli-ui/src/debug/components/output.ts +141 -0
- package/packages/shared-cli-ui/src/debug/components/trace.ts +101 -0
- package/packages/shared-cli-ui/src/debug/components/tree.ts +88 -0
- package/packages/shared-cli-ui/src/debug/formatters/ai.ts +17 -0
- package/packages/shared-cli-ui/src/debug/formatters/human.ts +98 -0
- package/packages/shared-cli-ui/src/debug/formatters/timeline.ts +94 -0
- package/packages/shared-cli-ui/src/debug/index.ts +56 -0
- package/packages/shared-cli-ui/src/debug/types.ts +57 -0
- package/packages/shared-cli-ui/src/debug/utilities.ts +203 -0
- package/packages/shared-cli-ui/src/dynamic-command-discovery.ts +131 -0
- package/packages/shared-cli-ui/src/format.ts +412 -0
- package/packages/shared-cli-ui/src/index.ts +34 -0
- package/packages/shared-cli-ui/src/loader.ts +196 -0
- package/packages/shared-cli-ui/src/manifest-parser.ts +151 -0
- package/packages/shared-cli-ui/src/modern-format.ts +271 -0
- package/packages/shared-cli-ui/src/multi-cli-suggestions.ts +159 -0
- package/packages/shared-cli-ui/src/table.ts +134 -0
- package/packages/shared-cli-ui/src/timing-tracker.ts +68 -0
- package/packages/shared-cli-ui/src/utils/context.ts +12 -0
- package/packages/shared-cli-ui/src/utils/env.ts +164 -0
- package/packages/shared-cli-ui/src/utils/flags.ts +269 -0
- package/packages/shared-cli-ui/src/utils/path.ts +8 -0
- package/packages/shared-cli-ui/tsconfig.build.json +15 -0
- package/packages/shared-cli-ui/tsconfig.json +9 -0
- package/packages/shared-cli-ui/tsup.config.ts +11 -0
- package/packages/shared-cli-ui/vitest.config.ts +15 -0
- package/packages/shared-command-kit/CHANGELOG.md +20 -0
- package/packages/shared-command-kit/LICENSE +22 -0
- package/packages/shared-command-kit/README.md +1030 -0
- package/packages/shared-command-kit/docs/HIGH-LEVEL-API.md +89 -0
- package/packages/shared-command-kit/docs/LOW-LEVEL-API.md +105 -0
- package/packages/shared-command-kit/docs/MIGRATION-GUIDE.md +135 -0
- package/packages/shared-command-kit/eslint.config.js +27 -0
- package/packages/shared-command-kit/eslint.config.ts +14 -0
- package/packages/shared-command-kit/package.json +76 -0
- package/packages/shared-command-kit/prettierrc.json +5 -0
- package/packages/shared-command-kit/src/__tests__/define-command.spec.ts +294 -0
- package/packages/shared-command-kit/src/__tests__/define-route.test.ts +285 -0
- package/packages/shared-command-kit/src/__tests__/define-system-command.spec.ts +508 -0
- package/packages/shared-command-kit/src/__tests__/define-webhook.test.ts +156 -0
- package/packages/shared-command-kit/src/__tests__/define-websocket.test.ts +316 -0
- package/packages/shared-command-kit/src/__tests__/errors.spec.ts +45 -0
- package/packages/shared-command-kit/src/__tests__/flags.spec.ts +353 -0
- package/packages/shared-command-kit/src/__tests__/platform-api.test.ts +135 -0
- package/packages/shared-command-kit/src/__tests__/plugin-context-v3.snapshot.spec.ts +240 -0
- package/packages/shared-command-kit/src/__tests__/ws-types.test.ts +359 -0
- package/packages/shared-command-kit/src/analytics/index.ts +6 -0
- package/packages/shared-command-kit/src/analytics/with-analytics.ts +195 -0
- package/packages/shared-command-kit/src/define-action.ts +100 -0
- package/packages/shared-command-kit/src/define-command.ts +113 -0
- package/packages/shared-command-kit/src/define-route.ts +113 -0
- package/packages/shared-command-kit/src/define-system-command.ts +362 -0
- package/packages/shared-command-kit/src/define-webhook.ts +115 -0
- package/packages/shared-command-kit/src/define-websocket.ts +308 -0
- package/packages/shared-command-kit/src/errors/factory.ts +282 -0
- package/packages/shared-command-kit/src/errors/format-validation.ts +144 -0
- package/packages/shared-command-kit/src/errors/format.ts +92 -0
- package/packages/shared-command-kit/src/errors/index.ts +9 -0
- package/packages/shared-command-kit/src/errors/types.ts +32 -0
- package/packages/shared-command-kit/src/flags/define.ts +92 -0
- package/packages/shared-command-kit/src/flags/index.ts +9 -0
- package/packages/shared-command-kit/src/flags/types.ts +153 -0
- package/packages/shared-command-kit/src/flags/validate.ts +358 -0
- package/packages/shared-command-kit/src/helpers/context.ts +8 -0
- package/packages/shared-command-kit/src/helpers/flags.ts +84 -0
- package/packages/shared-command-kit/src/helpers/index.ts +42 -0
- package/packages/shared-command-kit/src/helpers/patterns.ts +464 -0
- package/packages/shared-command-kit/src/helpers/platform.ts +335 -0
- package/packages/shared-command-kit/src/helpers/use-analytics.ts +95 -0
- package/packages/shared-command-kit/src/helpers/use-cache.ts +97 -0
- package/packages/shared-command-kit/src/helpers/use-config.ts +99 -0
- package/packages/shared-command-kit/src/helpers/use-embeddings.ts +49 -0
- package/packages/shared-command-kit/src/helpers/use-llm.ts +316 -0
- package/packages/shared-command-kit/src/helpers/use-logger.ts +77 -0
- package/packages/shared-command-kit/src/helpers/use-platform.ts +111 -0
- package/packages/shared-command-kit/src/helpers/use-resource-broker.ts +106 -0
- package/packages/shared-command-kit/src/helpers/use-storage.ts +71 -0
- package/packages/shared-command-kit/src/helpers/use-vector-store.ts +49 -0
- package/packages/shared-command-kit/src/helpers/validation.ts +398 -0
- package/packages/shared-command-kit/src/index.ts +410 -0
- package/packages/shared-command-kit/src/jobs.ts +132 -0
- package/packages/shared-command-kit/src/lifecycle/define-handlers.ts +366 -0
- package/packages/shared-command-kit/src/lifecycle/index.ts +6 -0
- package/packages/shared-command-kit/src/manifest.ts +127 -0
- package/packages/shared-command-kit/src/rest/define-handler.ts +187 -0
- package/packages/shared-command-kit/src/rest/index.ts +11 -0
- package/packages/shared-command-kit/src/studio/index.ts +12 -0
- package/packages/shared-command-kit/src/validation/index.ts +6 -0
- package/packages/shared-command-kit/src/validation/schema-builders.ts +409 -0
- package/packages/shared-command-kit/src/ws-types.ts +106 -0
- package/packages/shared-command-kit/tsconfig.build.json +15 -0
- package/packages/shared-command-kit/tsconfig.json +9 -0
- package/packages/shared-command-kit/tsup.config.ts +30 -0
- package/packages/shared-command-kit/vitest.config.ts +4 -0
- package/packages/shared-http/package.json +67 -0
- package/packages/shared-http/src/__tests__/log-correlation.test.ts +81 -0
- package/packages/shared-http/src/__tests__/operation-metrics-tracker.test.ts +55 -0
- package/packages/shared-http/src/http-observability-collector.ts +363 -0
- package/packages/shared-http/src/index.ts +36 -0
- package/packages/shared-http/src/log-correlation.ts +89 -0
- package/packages/shared-http/src/operation-metrics-tracker.ts +107 -0
- package/packages/shared-http/src/register-openapi.ts +108 -0
- package/packages/shared-http/src/resolve-schema-ref.ts +75 -0
- package/packages/shared-http/src/schemas.ts +29 -0
- package/packages/shared-http/src/service-observability.ts +63 -0
- package/packages/shared-http/tsconfig.build.json +15 -0
- package/packages/shared-http/tsconfig.json +9 -0
- package/packages/shared-http/tsup.config.ts +23 -0
- package/packages/shared-http/vitest.config.ts +13 -0
- package/packages/shared-perm-presets/CHANGELOG.md +20 -0
- package/packages/shared-perm-presets/README.md +78 -0
- package/packages/shared-perm-presets/eslint.config.js +27 -0
- package/packages/shared-perm-presets/package.json +45 -0
- package/packages/shared-perm-presets/src/__tests__/combine.test.ts +403 -0
- package/packages/shared-perm-presets/src/__tests__/presets.test.ts +205 -0
- package/packages/shared-perm-presets/src/combine.ts +278 -0
- package/packages/shared-perm-presets/src/index.ts +18 -0
- package/packages/shared-perm-presets/src/presets/ci-environment.ts +34 -0
- package/packages/shared-perm-presets/src/presets/full-env.ts +16 -0
- package/packages/shared-perm-presets/src/presets/git-workflow.ts +40 -0
- package/packages/shared-perm-presets/src/presets/index.ts +8 -0
- package/packages/shared-perm-presets/src/presets/kb-platform.ts +30 -0
- package/packages/shared-perm-presets/src/presets/llm-access.ts +29 -0
- package/packages/shared-perm-presets/src/presets/minimal.ts +21 -0
- package/packages/shared-perm-presets/src/presets/npm-publish.ts +48 -0
- package/packages/shared-perm-presets/src/presets/vector-store.ts +40 -0
- package/packages/shared-perm-presets/src/types.ts +192 -0
- package/packages/shared-perm-presets/tsconfig.build.json +15 -0
- package/packages/shared-perm-presets/tsconfig.json +9 -0
- package/packages/shared-perm-presets/tsup.config.ts +8 -0
- package/packages/shared-perm-presets/vitest.config.ts +9 -0
- package/packages/shared-testing/CHANGELOG.md +20 -0
- package/packages/shared-testing/README.md +430 -0
- package/packages/shared-testing/package.json +51 -0
- package/packages/shared-testing/src/__tests__/create-test-context.test.ts +199 -0
- package/packages/shared-testing/src/__tests__/mock-cache.test.ts +174 -0
- package/packages/shared-testing/src/__tests__/mock-llm.test.ts +212 -0
- package/packages/shared-testing/src/__tests__/setup-platform.test.ts +90 -0
- package/packages/shared-testing/src/__tests__/test-command.test.ts +557 -0
- package/packages/shared-testing/src/create-test-context.ts +550 -0
- package/packages/shared-testing/src/index.ts +77 -0
- package/packages/shared-testing/src/mock-cache.ts +179 -0
- package/packages/shared-testing/src/mock-llm.ts +319 -0
- package/packages/shared-testing/src/mock-logger.ts +97 -0
- package/packages/shared-testing/src/mock-storage.ts +108 -0
- package/packages/shared-testing/src/setup-platform.ts +101 -0
- package/packages/shared-testing/src/test-command.ts +288 -0
- package/packages/shared-testing/tsconfig.build.json +15 -0
- package/packages/shared-testing/tsconfig.json +9 -0
- package/packages/shared-testing/tsup.config.ts +20 -0
- package/packages/shared-testing/vitest.config.ts +3 -0
- package/packages/shared-tool-kit/CHANGELOG.md +20 -0
- package/packages/shared-tool-kit/package.json +47 -0
- package/packages/shared-tool-kit/src/__tests__/factory.test.ts +103 -0
- package/packages/shared-tool-kit/src/__tests__/mock-tool.test.ts +95 -0
- package/packages/shared-tool-kit/src/factory.ts +126 -0
- package/packages/shared-tool-kit/src/index.ts +32 -0
- package/packages/shared-tool-kit/src/testing/index.ts +84 -0
- package/packages/shared-tool-kit/tsconfig.build.json +15 -0
- package/packages/shared-tool-kit/tsconfig.json +9 -0
- package/packages/shared-tool-kit/tsup.config.ts +21 -0
- package/pnpm-workspace.yaml +11070 -0
- package/prettierrc.json +1 -0
- package/scripts/devkit-sync.mjs +37 -0
- package/scripts/hooks/post-push +9 -0
- package/scripts/hooks/pre-commit +9 -0
- package/scripts/hooks/pre-push +9 -0
- package/tsconfig.base.json +9 -0
- package/tsconfig.build.json +15 -0
- package/tsconfig.json +9 -0
- package/tsconfig.paths.json +50 -0
- package/tsconfig.tools.json +18 -0
- package/tsup.config.bin.ts +34 -0
- package/tsup.config.cli.ts +41 -0
- package/tsup.config.dual.ts +46 -0
- package/tsup.config.ts +36 -0
- package/tsup.external.json +104 -0
- package/vitest.config.ts +48 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# High-level API
|
|
2
|
+
|
|
3
|
+
Complete wrapper for building commands with zero boilerplate.
|
|
4
|
+
|
|
5
|
+
## defineCommand
|
|
6
|
+
|
|
7
|
+
The `defineCommand` function handles all boilerplate automatically:
|
|
8
|
+
|
|
9
|
+
- Flag validation
|
|
10
|
+
- Logging
|
|
11
|
+
- Analytics
|
|
12
|
+
- Error handling
|
|
13
|
+
- Output formatting
|
|
14
|
+
- Timing tracking
|
|
15
|
+
|
|
16
|
+
### Basic Example
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
import { defineCommand } from '@kb-labs/cli-command-kit';
|
|
20
|
+
|
|
21
|
+
export const myCommand = defineCommand({
|
|
22
|
+
name: 'my-command',
|
|
23
|
+
flags: {
|
|
24
|
+
scope: { type: 'string', required: true },
|
|
25
|
+
'dry-run': { type: 'boolean', default: false },
|
|
26
|
+
},
|
|
27
|
+
async handler(ctx, argv, flags) {
|
|
28
|
+
ctx.logger?.info('Command started', { scope: flags.scope });
|
|
29
|
+
ctx.tracker.checkpoint('start');
|
|
30
|
+
|
|
31
|
+
// Business logic
|
|
32
|
+
|
|
33
|
+
return { ok: true };
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### With Analytics
|
|
39
|
+
|
|
40
|
+
```typescript
|
|
41
|
+
export const myCommand = defineCommand({
|
|
42
|
+
name: 'my-command',
|
|
43
|
+
flags: { /* ... */ },
|
|
44
|
+
analytics: {
|
|
45
|
+
startEvent: 'MY_COMMAND_STARTED',
|
|
46
|
+
finishEvent: 'MY_COMMAND_FINISHED',
|
|
47
|
+
includeFlags: true,
|
|
48
|
+
},
|
|
49
|
+
async handler(ctx, argv, flags) {
|
|
50
|
+
// Analytics events are sent automatically
|
|
51
|
+
return { ok: true };
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### With Custom Formatter
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
export const myCommand = defineCommand({
|
|
60
|
+
name: 'my-command',
|
|
61
|
+
flags: { /* ... */ },
|
|
62
|
+
async handler(ctx, argv, flags) {
|
|
63
|
+
return { ok: true, data: 'result' };
|
|
64
|
+
},
|
|
65
|
+
formatter(result, ctx, flags) {
|
|
66
|
+
if (flags.json) {
|
|
67
|
+
ctx.output?.json(result);
|
|
68
|
+
} else {
|
|
69
|
+
ctx.output?.write(`✓ Success: ${result.data}`);
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Enhanced Context
|
|
76
|
+
|
|
77
|
+
The handler receives an enhanced context with:
|
|
78
|
+
|
|
79
|
+
- `ctx.tracker` - TimingTracker instance
|
|
80
|
+
- All original `ctx` properties (logger, output, etc.)
|
|
81
|
+
|
|
82
|
+
## Return Values
|
|
83
|
+
|
|
84
|
+
Handler can return:
|
|
85
|
+
|
|
86
|
+
- `number` - Exit code (0 = success, non-zero = error)
|
|
87
|
+
- `{ ok: boolean, ... }` - Result object (ok: true = success, ok: false = error)
|
|
88
|
+
- Defaults to `{ ok: true }` if nothing returned
|
|
89
|
+
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Low-level API
|
|
2
|
+
|
|
3
|
+
Atomic utilities for building commands manually.
|
|
4
|
+
|
|
5
|
+
## Flag Validation
|
|
6
|
+
|
|
7
|
+
### defineFlags
|
|
8
|
+
|
|
9
|
+
Define a flag schema with automatic type inference.
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
import { defineFlags } from '@kb-labs/cli-command-kit/flags';
|
|
13
|
+
|
|
14
|
+
const schema = defineFlags({
|
|
15
|
+
scope: {
|
|
16
|
+
type: 'string',
|
|
17
|
+
required: true,
|
|
18
|
+
pattern: /^[@a-z0-9-/]+$/i,
|
|
19
|
+
},
|
|
20
|
+
'dry-run': {
|
|
21
|
+
type: 'boolean',
|
|
22
|
+
default: false,
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
type Flags = typeof schema.infer;
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### validateFlags
|
|
30
|
+
|
|
31
|
+
Validate flags against schema.
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
import { validateFlags } from '@kb-labs/cli-command-kit/flags';
|
|
35
|
+
|
|
36
|
+
const flags = await validateFlags(rawFlags, schema);
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### validateFlagsSafe
|
|
40
|
+
|
|
41
|
+
Safe version that doesn't throw.
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
import { validateFlagsSafe } from '@kb-labs/cli-command-kit/flags';
|
|
45
|
+
|
|
46
|
+
const result = await validateFlagsSafe(rawFlags, schema);
|
|
47
|
+
if (!result.success) {
|
|
48
|
+
// Handle errors
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Analytics
|
|
53
|
+
|
|
54
|
+
### trackCommand
|
|
55
|
+
|
|
56
|
+
Wrapper around analytics SDK.
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
import { trackCommand } from '@kb-labs/cli-command-kit/analytics';
|
|
60
|
+
|
|
61
|
+
const { emit, scope } = trackCommand(ctx.analytics, {
|
|
62
|
+
command: 'my-command',
|
|
63
|
+
startEvent: 'MY_COMMAND_STARTED',
|
|
64
|
+
finishEvent: 'MY_COMMAND_FINISHED',
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
return await scope(async () => {
|
|
68
|
+
await emit('started', { flags });
|
|
69
|
+
// business logic
|
|
70
|
+
await emit('finished', { result: 'success' });
|
|
71
|
+
});
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Error Formatting
|
|
75
|
+
|
|
76
|
+
### formatError
|
|
77
|
+
|
|
78
|
+
Format errors for display.
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
import { formatError } from '@kb-labs/cli-command-kit/errors';
|
|
82
|
+
|
|
83
|
+
const formatted = formatError(error, {
|
|
84
|
+
jsonMode: Boolean(flags.json),
|
|
85
|
+
showStack: Boolean(flags.debug),
|
|
86
|
+
timingMs: tracker.total(),
|
|
87
|
+
});
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Timing
|
|
91
|
+
|
|
92
|
+
### TimingTracker
|
|
93
|
+
|
|
94
|
+
Re-exported from `@kb-labs/shared-cli-ui`.
|
|
95
|
+
|
|
96
|
+
```typescript
|
|
97
|
+
import { TimingTracker } from '@kb-labs/cli-command-kit/helpers';
|
|
98
|
+
|
|
99
|
+
const tracker = new TimingTracker();
|
|
100
|
+
tracker.checkpoint('start');
|
|
101
|
+
// ...
|
|
102
|
+
tracker.checkpoint('complete');
|
|
103
|
+
const total = tracker.total();
|
|
104
|
+
```
|
|
105
|
+
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# Migration Guide
|
|
2
|
+
|
|
3
|
+
Guide for migrating existing commands to use Command Kit.
|
|
4
|
+
|
|
5
|
+
## Low-level Migration
|
|
6
|
+
|
|
7
|
+
### Before
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
export async function myHandler(
|
|
11
|
+
ctx: CliContext,
|
|
12
|
+
argv: string[],
|
|
13
|
+
rawFlags: Record<string, unknown>
|
|
14
|
+
) {
|
|
15
|
+
const jsonMode = !!rawFlags.json;
|
|
16
|
+
const scope = rawFlags.scope as string;
|
|
17
|
+
|
|
18
|
+
if (!scope) {
|
|
19
|
+
ctx.output?.error('--scope is required');
|
|
20
|
+
return 1;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// business logic
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### After
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
import { defineFlags, validateFlags } from '@kb-labs/cli-command-kit/flags';
|
|
31
|
+
import { TimingTracker } from '@kb-labs/cli-command-kit/helpers';
|
|
32
|
+
import { trackCommand } from '@kb-labs/cli-command-kit/analytics';
|
|
33
|
+
import { formatError } from '@kb-labs/cli-command-kit/errors';
|
|
34
|
+
|
|
35
|
+
const schema = defineFlags({
|
|
36
|
+
scope: { type: 'string', required: true },
|
|
37
|
+
json: { type: 'boolean', default: false },
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
export async function myHandler(
|
|
41
|
+
ctx: CliContext,
|
|
42
|
+
argv: string[],
|
|
43
|
+
rawFlags: Record<string, unknown>
|
|
44
|
+
) {
|
|
45
|
+
const tracker = new TimingTracker();
|
|
46
|
+
|
|
47
|
+
try {
|
|
48
|
+
const flags = await validateFlags(rawFlags, schema);
|
|
49
|
+
|
|
50
|
+
const { emit, scope } = trackCommand(ctx.analytics, {
|
|
51
|
+
command: 'my-command',
|
|
52
|
+
startEvent: 'MY_COMMAND_STARTED',
|
|
53
|
+
finishEvent: 'MY_COMMAND_FINISHED',
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
return await scope(async () => {
|
|
57
|
+
await emit('started', { scope: flags.scope });
|
|
58
|
+
|
|
59
|
+
// business logic
|
|
60
|
+
|
|
61
|
+
await emit('finished', { result: 'success' });
|
|
62
|
+
return 0;
|
|
63
|
+
});
|
|
64
|
+
} catch (error) {
|
|
65
|
+
const formatted = formatError(error, { jsonMode: Boolean(rawFlags.json) });
|
|
66
|
+
if (rawFlags.json) {
|
|
67
|
+
ctx.output?.json(formatted.json);
|
|
68
|
+
} else {
|
|
69
|
+
ctx.output?.error(formatted.message);
|
|
70
|
+
}
|
|
71
|
+
return 1;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## High-level Migration
|
|
77
|
+
|
|
78
|
+
### Before
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
export const run: Command = {
|
|
82
|
+
name: 'release:run',
|
|
83
|
+
category: 'release',
|
|
84
|
+
describe: 'Execute release process',
|
|
85
|
+
async run(ctx, argv, flags) {
|
|
86
|
+
const jsonMode = !!flags.json;
|
|
87
|
+
// ... lots of boilerplate
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
export async function runCommand(ctx, argv, flags) {
|
|
92
|
+
return run.run(ctx, argv, flags);
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### After
|
|
97
|
+
|
|
98
|
+
```typescript
|
|
99
|
+
import { defineCommand } from '@kb-labs/cli-command-kit';
|
|
100
|
+
|
|
101
|
+
export const runCommand = defineCommand({
|
|
102
|
+
name: 'release:run',
|
|
103
|
+
flags: {
|
|
104
|
+
scope: { type: 'string' },
|
|
105
|
+
'dry-run': { type: 'boolean', default: false },
|
|
106
|
+
json: { type: 'boolean', default: false },
|
|
107
|
+
},
|
|
108
|
+
analytics: {
|
|
109
|
+
startEvent: 'RELEASE_RUN_STARTED',
|
|
110
|
+
finishEvent: 'RELEASE_RUN_FINISHED',
|
|
111
|
+
},
|
|
112
|
+
async handler(ctx, argv, flags) {
|
|
113
|
+
// flags are typed and validated automatically
|
|
114
|
+
// ctx.tracker is available
|
|
115
|
+
// analytics is handled automatically
|
|
116
|
+
|
|
117
|
+
ctx.logger?.info('Release started', { scope: flags.scope });
|
|
118
|
+
ctx.tracker.checkpoint('planning');
|
|
119
|
+
|
|
120
|
+
// business logic
|
|
121
|
+
|
|
122
|
+
return { ok: true, published: 5 };
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Key Changes
|
|
128
|
+
|
|
129
|
+
1. **Remove Command object wrapper** - Export function directly
|
|
130
|
+
2. **Use defineFlags** - Get type-safe flags
|
|
131
|
+
3. **Use defineCommand** - Get all boilerplate handled automatically
|
|
132
|
+
4. **Remove manual validation** - Handled by kit
|
|
133
|
+
5. **Remove manual analytics** - Handled by kit
|
|
134
|
+
6. **Remove manual error handling** - Handled by kit
|
|
135
|
+
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standard ESLint configuration template
|
|
3
|
+
*
|
|
4
|
+
* This is the canonical template for all @kb-labs packages.
|
|
5
|
+
* DO NOT modify this file locally - it is synced from @kb-labs/devkit
|
|
6
|
+
*
|
|
7
|
+
* Customization guidelines:
|
|
8
|
+
* - DevKit preset already includes all standard ignores
|
|
9
|
+
* - Only add project-specific ignores if absolutely necessary
|
|
10
|
+
* - Document why custom ignores are needed
|
|
11
|
+
*
|
|
12
|
+
* @see https://github.com/kb-labs/devkit#eslint-configuration
|
|
13
|
+
*/
|
|
14
|
+
import nodePreset from '@kb-labs/devkit/eslint/node.js';
|
|
15
|
+
|
|
16
|
+
export default [
|
|
17
|
+
...nodePreset,
|
|
18
|
+
|
|
19
|
+
// OPTIONAL: Add project-specific ignores only if needed
|
|
20
|
+
// DevKit preset already ignores: dist/, coverage/, node_modules/, *.d.ts, scripts/, etc.
|
|
21
|
+
// {
|
|
22
|
+
// ignores: [
|
|
23
|
+
// // Add ONLY project-specific patterns here
|
|
24
|
+
// // Example: '**/*.generated.ts',
|
|
25
|
+
// ]
|
|
26
|
+
// }
|
|
27
|
+
];
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@kb-labs/shared-command-kit",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Command Kit for KB Labs CLI - utilities and high-level API for building commands",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts"
|
|
12
|
+
},
|
|
13
|
+
"./flags": {
|
|
14
|
+
"import": "./dist/flags/index.js",
|
|
15
|
+
"types": "./dist/flags/index.d.ts"
|
|
16
|
+
},
|
|
17
|
+
"./analytics": {
|
|
18
|
+
"import": "./dist/analytics/index.js",
|
|
19
|
+
"types": "./dist/analytics/index.d.ts"
|
|
20
|
+
},
|
|
21
|
+
"./errors": {
|
|
22
|
+
"import": "./dist/errors/index.js",
|
|
23
|
+
"types": "./dist/errors/index.d.ts"
|
|
24
|
+
},
|
|
25
|
+
"./helpers": {
|
|
26
|
+
"import": "./dist/helpers/index.js",
|
|
27
|
+
"types": "./dist/helpers/index.d.ts"
|
|
28
|
+
},
|
|
29
|
+
"./studio": {
|
|
30
|
+
"import": "./dist/studio/index.js",
|
|
31
|
+
"types": "./dist/studio/index.d.ts"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"files": [
|
|
35
|
+
"dist",
|
|
36
|
+
"README.md",
|
|
37
|
+
"LICENSE"
|
|
38
|
+
],
|
|
39
|
+
"sideEffects": false,
|
|
40
|
+
"scripts": {
|
|
41
|
+
"clean": "rimraf dist",
|
|
42
|
+
"build": "tsup --config tsup.config.ts",
|
|
43
|
+
"dev": "tsup --config tsup.config.ts --watch",
|
|
44
|
+
"lint": "eslint src",
|
|
45
|
+
"lint:fix": "eslint src --fix",
|
|
46
|
+
"type-check": "tsc --noEmit",
|
|
47
|
+
"test": "vitest run --passWithNoTests",
|
|
48
|
+
"test:watch": "vitest"
|
|
49
|
+
},
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"@kb-labs/core-platform": "link:../../../kb-labs-core/packages/core-platform",
|
|
52
|
+
"@kb-labs/core-resource-broker": "link:../../../kb-labs-core/packages/core-resource-broker",
|
|
53
|
+
"@kb-labs/core-runtime": "link:../../../kb-labs-core/packages/core-runtime",
|
|
54
|
+
"@kb-labs/plugin-contracts": "link:../../../../infra/kb-labs-plugin/packages/plugin-contracts",
|
|
55
|
+
"@kb-labs/plugin-runtime": "link:../../../../infra/kb-labs-plugin/packages/plugin-runtime",
|
|
56
|
+
"@kb-labs/shared-cli-ui": "workspace:*",
|
|
57
|
+
"zod": "^3.23.8",
|
|
58
|
+
"glob": "^11.0.0"
|
|
59
|
+
},
|
|
60
|
+
"devDependencies": {
|
|
61
|
+
"@kb-labs/devkit": "link:../../../../infra/kb-labs-devkit",
|
|
62
|
+
"@types/node": "^24.3.3",
|
|
63
|
+
"rimraf": "^6.0.1",
|
|
64
|
+
"tsup": "^8.5.0",
|
|
65
|
+
"typescript": "^5.6.3",
|
|
66
|
+
"vitest": "^3.2.4"
|
|
67
|
+
},
|
|
68
|
+
"engines": {
|
|
69
|
+
"node": ">=20.0.0",
|
|
70
|
+
"pnpm": ">=9.0.0"
|
|
71
|
+
},
|
|
72
|
+
"packageManager": "pnpm@9.11.0",
|
|
73
|
+
"publishConfig": {
|
|
74
|
+
"access": "public"
|
|
75
|
+
}
|
|
76
|
+
}
|