@planu/cli 0.72.0 → 0.73.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/README.md +1 -1
- package/dist/config/license-plans.json +9 -2
- package/dist/config/tool-groups.json +5 -1
- package/dist/engine/actuals/git-analyzer.js +1 -1
- package/dist/engine/actuals/git-analyzer.js.map +1 -1
- package/dist/engine/agent-prompt-generator.d.ts +12 -0
- package/dist/engine/agent-prompt-generator.d.ts.map +1 -0
- package/dist/engine/agent-prompt-generator.js +171 -0
- package/dist/engine/agent-prompt-generator.js.map +1 -0
- package/dist/engine/ai-tool-detector/index.d.ts +6 -0
- package/dist/engine/ai-tool-detector/index.d.ts.map +1 -0
- package/dist/engine/ai-tool-detector/index.js +95 -0
- package/dist/engine/ai-tool-detector/index.js.map +1 -0
- package/dist/engine/ci-generator/planu-steps.d.ts.map +1 -1
- package/dist/engine/ci-generator/planu-steps.js +10 -11
- package/dist/engine/ci-generator/planu-steps.js.map +1 -1
- package/dist/engine/convention-scanner/codebase-scanner.d.ts +7 -0
- package/dist/engine/convention-scanner/codebase-scanner.d.ts.map +1 -0
- package/dist/engine/convention-scanner/codebase-scanner.js +258 -0
- package/dist/engine/convention-scanner/codebase-scanner.js.map +1 -0
- package/dist/engine/convention-scanner/convention-parser.d.ts +7 -0
- package/dist/engine/convention-scanner/convention-parser.d.ts.map +1 -0
- package/dist/engine/convention-scanner/convention-parser.js +195 -0
- package/dist/engine/convention-scanner/convention-parser.js.map +1 -0
- package/dist/engine/convention-scanner/index.d.ts +3 -0
- package/dist/engine/convention-scanner/index.d.ts.map +1 -0
- package/dist/engine/convention-scanner/index.js +5 -0
- package/dist/engine/convention-scanner/index.js.map +1 -0
- package/dist/engine/convention-sync.d.ts +9 -0
- package/dist/engine/convention-sync.d.ts.map +1 -0
- package/dist/engine/convention-sync.js +156 -0
- package/dist/engine/convention-sync.js.map +1 -0
- package/dist/engine/doc-generator/portal/portal-regenerator.d.ts +2 -1
- package/dist/engine/doc-generator/portal/portal-regenerator.d.ts.map +1 -1
- package/dist/engine/doc-generator/portal/portal-regenerator.js +23 -15
- package/dist/engine/doc-generator/portal/portal-regenerator.js.map +1 -1
- package/dist/engine/feedback/triage.d.ts +16 -0
- package/dist/engine/feedback/triage.d.ts.map +1 -0
- package/dist/engine/feedback/triage.js +165 -0
- package/dist/engine/feedback/triage.js.map +1 -0
- package/dist/engine/hooks-reconciler.d.ts +7 -0
- package/dist/engine/hooks-reconciler.d.ts.map +1 -0
- package/dist/engine/hooks-reconciler.js +214 -0
- package/dist/engine/hooks-reconciler.js.map +1 -0
- package/dist/engine/platform-registry.d.ts +17 -0
- package/dist/engine/platform-registry.d.ts.map +1 -0
- package/dist/engine/platform-registry.js +78 -0
- package/dist/engine/platform-registry.js.map +1 -0
- package/dist/engine/project-health-checker.d.ts +4 -2
- package/dist/engine/project-health-checker.d.ts.map +1 -1
- package/dist/engine/project-health-checker.js +78 -5
- package/dist/engine/project-health-checker.js.map +1 -1
- package/dist/engine/rules-generator/index.d.ts +14 -0
- package/dist/engine/rules-generator/index.d.ts.map +1 -0
- package/dist/engine/rules-generator/index.js +313 -0
- package/dist/engine/rules-generator/index.js.map +1 -0
- package/dist/engine/rules-reconciler.d.ts +13 -0
- package/dist/engine/rules-reconciler.d.ts.map +1 -0
- package/dist/engine/rules-reconciler.js +193 -0
- package/dist/engine/rules-reconciler.js.map +1 -0
- package/dist/engine/skill-generator/detect.d.ts +1 -0
- package/dist/engine/skill-generator/detect.d.ts.map +1 -1
- package/dist/engine/skill-generator/detect.js +13 -5
- package/dist/engine/skill-generator/detect.js.map +1 -1
- package/dist/engine/skills/skills-fetcher.d.ts +4 -0
- package/dist/engine/skills/skills-fetcher.d.ts.map +1 -0
- package/dist/engine/skills/skills-fetcher.js +102 -0
- package/dist/engine/skills/skills-fetcher.js.map +1 -0
- package/dist/engine/skills-reconciler.d.ts +15 -0
- package/dist/engine/skills-reconciler.d.ts.map +1 -0
- package/dist/engine/skills-reconciler.js +98 -0
- package/dist/engine/skills-reconciler.js.map +1 -0
- package/dist/engine/spec-template-cleaner.d.ts +12 -0
- package/dist/engine/spec-template-cleaner.d.ts.map +1 -0
- package/dist/engine/spec-template-cleaner.js +119 -0
- package/dist/engine/spec-template-cleaner.js.map +1 -0
- package/dist/engine/validator/analyzer.d.ts +4 -2
- package/dist/engine/validator/analyzer.d.ts.map +1 -1
- package/dist/engine/validator/analyzer.js +5 -2
- package/dist/engine/validator/analyzer.js.map +1 -1
- package/dist/engine/validator/deep-code-checker.d.ts +4 -2
- package/dist/engine/validator/deep-code-checker.d.ts.map +1 -1
- package/dist/engine/validator/deep-code-checker.js +44 -1
- package/dist/engine/validator/deep-code-checker.js.map +1 -1
- package/dist/engine/validator/extractors.d.ts +8 -1
- package/dist/engine/validator/extractors.d.ts.map +1 -1
- package/dist/engine/validator/extractors.js +33 -0
- package/dist/engine/validator/extractors.js.map +1 -1
- package/dist/engine/validator.d.ts.map +1 -1
- package/dist/engine/validator.js +13 -2
- package/dist/engine/validator.js.map +1 -1
- package/dist/engine/workers/schema.d.ts +58 -0
- package/dist/engine/workers/schema.d.ts.map +1 -0
- package/dist/engine/workers/schema.js +41 -0
- package/dist/engine/workers/schema.js.map +1 -0
- package/dist/engine/workers/worker-engine.js +1 -1
- package/dist/engine/workers/worker-engine.js.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/storage/convention-baseline.d.ts +20 -0
- package/dist/storage/convention-baseline.d.ts.map +1 -0
- package/dist/storage/convention-baseline.js +57 -0
- package/dist/storage/convention-baseline.js.map +1 -0
- package/dist/storage/feedback-remote.d.ts +8 -0
- package/dist/storage/feedback-remote.d.ts.map +1 -0
- package/dist/storage/feedback-remote.js +27 -0
- package/dist/storage/feedback-remote.js.map +1 -0
- package/dist/storage/feedback-store.d.ts +27 -0
- package/dist/storage/feedback-store.d.ts.map +1 -0
- package/dist/storage/feedback-store.js +272 -0
- package/dist/storage/feedback-store.js.map +1 -0
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +1 -0
- package/dist/storage/index.js.map +1 -1
- package/dist/tools/convention-sync.d.ts +8 -0
- package/dist/tools/convention-sync.d.ts.map +1 -0
- package/dist/tools/convention-sync.js +77 -0
- package/dist/tools/convention-sync.js.map +1 -0
- package/dist/tools/create-spec-hu/ac-adapters/convention-adapter.d.ts +9 -0
- package/dist/tools/create-spec-hu/ac-adapters/convention-adapter.d.ts.map +1 -0
- package/dist/tools/create-spec-hu/ac-adapters/convention-adapter.js +68 -0
- package/dist/tools/create-spec-hu/ac-adapters/convention-adapter.js.map +1 -0
- package/dist/tools/create-spec-hu/ac-adapters/custom-template-adapter.d.ts +14 -0
- package/dist/tools/create-spec-hu/ac-adapters/custom-template-adapter.d.ts.map +1 -0
- package/dist/tools/create-spec-hu/ac-adapters/custom-template-adapter.js +60 -0
- package/dist/tools/create-spec-hu/ac-adapters/custom-template-adapter.js.map +1 -0
- package/dist/tools/create-spec-hu/ac-adapters/index.d.ts +4 -0
- package/dist/tools/create-spec-hu/ac-adapters/index.d.ts.map +1 -1
- package/dist/tools/create-spec-hu/ac-adapters/index.js +9 -1
- package/dist/tools/create-spec-hu/ac-adapters/index.js.map +1 -1
- package/dist/tools/create-spec.d.ts.map +1 -1
- package/dist/tools/create-spec.js +3 -2
- package/dist/tools/create-spec.js.map +1 -1
- package/dist/tools/delete-decision.d.ts.map +1 -1
- package/dist/tools/delete-decision.js +2 -0
- package/dist/tools/delete-decision.js.map +1 -1
- package/dist/tools/delete-project.d.ts.map +1 -1
- package/dist/tools/delete-project.js +11 -14
- package/dist/tools/delete-project.js.map +1 -1
- package/dist/tools/delete-spec.d.ts.map +1 -1
- package/dist/tools/delete-spec.js +11 -9
- package/dist/tools/delete-spec.js.map +1 -1
- package/dist/tools/estimate.d.ts.map +1 -1
- package/dist/tools/estimate.js +6 -5
- package/dist/tools/estimate.js.map +1 -1
- package/dist/tools/export-session.d.ts.map +1 -1
- package/dist/tools/export-session.js +7 -9
- package/dist/tools/export-session.js.map +1 -1
- package/dist/tools/feedback-handler.d.ts +5 -0
- package/dist/tools/feedback-handler.d.ts.map +1 -0
- package/dist/tools/feedback-handler.js +106 -0
- package/dist/tools/feedback-handler.js.map +1 -0
- package/dist/tools/generate-teammate-prompt.d.ts +8 -0
- package/dist/tools/generate-teammate-prompt.d.ts.map +1 -1
- package/dist/tools/generate-teammate-prompt.js +33 -0
- package/dist/tools/generate-teammate-prompt.js.map +1 -1
- package/dist/tools/init-project/handler.d.ts.map +1 -1
- package/dist/tools/init-project/handler.js +42 -7
- package/dist/tools/init-project/handler.js.map +1 -1
- package/dist/tools/init-project/helpers.d.ts.map +1 -1
- package/dist/tools/init-project/helpers.js +1 -2
- package/dist/tools/init-project/helpers.js.map +1 -1
- package/dist/tools/init-project/result-builder.d.ts.map +1 -1
- package/dist/tools/init-project/result-builder.js +12 -1
- package/dist/tools/init-project/result-builder.js.map +1 -1
- package/dist/tools/log-decision.d.ts.map +1 -1
- package/dist/tools/log-decision.js +15 -4
- package/dist/tools/log-decision.js.map +1 -1
- package/dist/tools/manage-trash.d.ts.map +1 -1
- package/dist/tools/manage-trash.js +13 -27
- package/dist/tools/manage-trash.js.map +1 -1
- package/dist/tools/reconcile-hooks.d.ts +7 -0
- package/dist/tools/reconcile-hooks.d.ts.map +1 -0
- package/dist/tools/reconcile-hooks.js +78 -0
- package/dist/tools/reconcile-hooks.js.map +1 -0
- package/dist/tools/reconcile-rules.d.ts +7 -0
- package/dist/tools/reconcile-rules.d.ts.map +1 -0
- package/dist/tools/reconcile-rules.js +86 -0
- package/dist/tools/reconcile-rules.js.map +1 -0
- package/dist/tools/reconcile-skills.d.ts +8 -0
- package/dist/tools/reconcile-skills.d.ts.map +1 -0
- package/dist/tools/reconcile-skills.js +70 -0
- package/dist/tools/reconcile-skills.js.map +1 -0
- package/dist/tools/register-feedback-tools.d.ts +3 -0
- package/dist/tools/register-feedback-tools.d.ts.map +1 -0
- package/dist/tools/register-feedback-tools.js +65 -0
- package/dist/tools/register-feedback-tools.js.map +1 -0
- package/dist/tools/register-spec-tools/core-spec-tools.d.ts.map +1 -1
- package/dist/tools/register-spec-tools/core-spec-tools.js +10 -4
- package/dist/tools/register-spec-tools/core-spec-tools.js.map +1 -1
- package/dist/tools/register-team-tools.d.ts.map +1 -1
- package/dist/tools/register-team-tools.js +35 -8
- package/dist/tools/register-team-tools.js.map +1 -1
- package/dist/tools/safe-handler.d.ts.map +1 -1
- package/dist/tools/safe-handler.js +20 -2
- package/dist/tools/safe-handler.js.map +1 -1
- package/dist/tools/schemas/index.d.ts +1 -0
- package/dist/tools/schemas/index.d.ts.map +1 -1
- package/dist/tools/schemas/index.js +1 -0
- package/dist/tools/schemas/index.js.map +1 -1
- package/dist/tools/schemas/reconcile-skills-schemas.d.ts +7 -0
- package/dist/tools/schemas/reconcile-skills-schemas.d.ts.map +1 -0
- package/dist/tools/schemas/reconcile-skills-schemas.js +18 -0
- package/dist/tools/schemas/reconcile-skills-schemas.js.map +1 -0
- package/dist/tools/schemas/workers-schema.d.ts +1 -56
- package/dist/tools/schemas/workers-schema.d.ts.map +1 -1
- package/dist/tools/schemas/workers-schema.js +6 -42
- package/dist/tools/schemas/workers-schema.js.map +1 -1
- package/dist/tools/skill-registry/search.d.ts.map +1 -1
- package/dist/tools/skill-registry/search.js +29 -3
- package/dist/tools/skill-registry/search.js.map +1 -1
- package/dist/tools/suggest-tooling/skills-fetcher.d.ts +1 -3
- package/dist/tools/suggest-tooling/skills-fetcher.d.ts.map +1 -1
- package/dist/tools/suggest-tooling/skills-fetcher.js +3 -101
- package/dist/tools/suggest-tooling/skills-fetcher.js.map +1 -1
- package/dist/tools/token-recording.d.ts +16 -0
- package/dist/tools/token-recording.d.ts.map +1 -0
- package/dist/tools/token-recording.js +47 -0
- package/dist/tools/token-recording.js.map +1 -0
- package/dist/tools/update-status-convention-gate.d.ts +12 -0
- package/dist/tools/update-status-convention-gate.d.ts.map +1 -0
- package/dist/tools/update-status-convention-gate.js +159 -0
- package/dist/tools/update-status-convention-gate.js.map +1 -0
- package/dist/tools/update-status-reconcile.d.ts +7 -0
- package/dist/tools/update-status-reconcile.d.ts.map +1 -0
- package/dist/tools/update-status-reconcile.js +47 -0
- package/dist/tools/update-status-reconcile.js.map +1 -0
- package/dist/tools/update-status.d.ts.map +1 -1
- package/dist/tools/update-status.js +113 -67
- package/dist/tools/update-status.js.map +1 -1
- package/dist/tools/validate.d.ts.map +1 -1
- package/dist/tools/validate.js +92 -2
- package/dist/tools/validate.js.map +1 -1
- package/dist/types/ai-tool-rules.d.ts +42 -0
- package/dist/types/ai-tool-rules.d.ts.map +1 -0
- package/dist/types/ai-tool-rules.js +3 -0
- package/dist/types/ai-tool-rules.js.map +1 -0
- package/dist/types/conventions.d.ts +155 -0
- package/dist/types/conventions.d.ts.map +1 -0
- package/dist/types/conventions.js +3 -0
- package/dist/types/conventions.js.map +1 -0
- package/dist/types/feedback.d.ts +76 -0
- package/dist/types/feedback.d.ts.map +1 -0
- package/dist/types/feedback.js +3 -0
- package/dist/types/feedback.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/project/planu-config.d.ts +4 -0
- package/dist/types/project/planu-config.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/config/license-plans.json +9 -2
- package/src/config/tool-groups.json +5 -1
|
@@ -1,60 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
export
|
|
3
|
-
type: z.ZodEnum<{
|
|
4
|
-
event: "event";
|
|
5
|
-
schedule: "schedule";
|
|
6
|
-
"file-change": "file-change";
|
|
7
|
-
}>;
|
|
8
|
-
patterns: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
9
|
-
events: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
10
|
-
intervalMs: z.ZodOptional<z.ZodNumber>;
|
|
11
|
-
}, z.core.$strip>;
|
|
12
|
-
export declare const WorkerDefinitionSchema: z.ZodObject<{
|
|
13
|
-
name: z.ZodString;
|
|
14
|
-
description: z.ZodString;
|
|
15
|
-
trigger: z.ZodObject<{
|
|
16
|
-
type: z.ZodEnum<{
|
|
17
|
-
event: "event";
|
|
18
|
-
schedule: "schedule";
|
|
19
|
-
"file-change": "file-change";
|
|
20
|
-
}>;
|
|
21
|
-
patterns: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
22
|
-
events: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
23
|
-
intervalMs: z.ZodOptional<z.ZodNumber>;
|
|
24
|
-
}, z.core.$strip>;
|
|
25
|
-
handler: z.ZodString;
|
|
26
|
-
priority: z.ZodNumber;
|
|
27
|
-
cooldownMs: z.ZodNumber;
|
|
28
|
-
enabled: z.ZodBoolean;
|
|
29
|
-
tier: z.ZodEnum<{
|
|
30
|
-
free: "free";
|
|
31
|
-
pro: "pro";
|
|
32
|
-
}>;
|
|
33
|
-
}, z.core.$strip>;
|
|
34
|
-
export declare const WorkerRegistrySchema: z.ZodObject<{
|
|
35
|
-
workers: z.ZodArray<z.ZodObject<{
|
|
36
|
-
name: z.ZodString;
|
|
37
|
-
description: z.ZodString;
|
|
38
|
-
trigger: z.ZodObject<{
|
|
39
|
-
type: z.ZodEnum<{
|
|
40
|
-
event: "event";
|
|
41
|
-
schedule: "schedule";
|
|
42
|
-
"file-change": "file-change";
|
|
43
|
-
}>;
|
|
44
|
-
patterns: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
45
|
-
events: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
46
|
-
intervalMs: z.ZodOptional<z.ZodNumber>;
|
|
47
|
-
}, z.core.$strip>;
|
|
48
|
-
handler: z.ZodString;
|
|
49
|
-
priority: z.ZodNumber;
|
|
50
|
-
cooldownMs: z.ZodNumber;
|
|
51
|
-
enabled: z.ZodBoolean;
|
|
52
|
-
tier: z.ZodEnum<{
|
|
53
|
-
free: "free";
|
|
54
|
-
pro: "pro";
|
|
55
|
-
}>;
|
|
56
|
-
}, z.core.$strip>>;
|
|
57
|
-
}, z.core.$strip>;
|
|
2
|
+
export { WorkerTriggerSchema, WorkerDefinitionSchema, WorkerRegistrySchema, } from '../../engine/workers/schema.js';
|
|
58
3
|
export declare const WorkerStatusInputSchema: z.ZodObject<{
|
|
59
4
|
projectId: z.ZodString;
|
|
60
5
|
workerName: z.ZodOptional<z.ZodString>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workers-schema.d.ts","sourceRoot":"","sources":["../../../src/tools/schemas/workers-schema.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"workers-schema.d.ts","sourceRoot":"","sources":["../../../src/tools/schemas/workers-schema.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AAMxC,eAAO,MAAM,uBAAuB;;;iBAUlC,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;iBAkBtC,CAAC"}
|
|
@@ -1,47 +1,11 @@
|
|
|
1
|
-
// tools/schemas/workers-schema.ts —
|
|
1
|
+
// tools/schemas/workers-schema.ts — Worker tool input schemas (SPEC-078)
|
|
2
|
+
// Registry schemas (WorkerTrigger/Definition/Registry) live in engine/workers/schema.ts
|
|
3
|
+
// so engine/ modules can import them without violating architecture.
|
|
2
4
|
import { z } from 'zod';
|
|
5
|
+
// Re-export engine schemas so existing consumers of this file don't break
|
|
6
|
+
export { WorkerTriggerSchema, WorkerDefinitionSchema, WorkerRegistrySchema, } from '../../engine/workers/schema.js';
|
|
3
7
|
// ---------------------------------------------------------------------------
|
|
4
|
-
//
|
|
5
|
-
// ---------------------------------------------------------------------------
|
|
6
|
-
export const WorkerTriggerSchema = z.object({
|
|
7
|
-
type: z
|
|
8
|
-
.enum(['file-change', 'event', 'schedule'])
|
|
9
|
-
.describe('Trigger type: file-change | event | schedule'),
|
|
10
|
-
patterns: z
|
|
11
|
-
.array(z.string().max(4096).describe('Glob pattern like **/*.ts'))
|
|
12
|
-
.max(100)
|
|
13
|
-
.optional()
|
|
14
|
-
.describe('Glob patterns for file-change triggers'),
|
|
15
|
-
events: z
|
|
16
|
-
.array(z.string().max(500).describe('Event name like post-create-spec'))
|
|
17
|
-
.max(100)
|
|
18
|
-
.optional()
|
|
19
|
-
.describe('Event names for event triggers'),
|
|
20
|
-
intervalMs: z
|
|
21
|
-
.number()
|
|
22
|
-
.int()
|
|
23
|
-
.positive()
|
|
24
|
-
.optional()
|
|
25
|
-
.describe('Interval in ms for schedule triggers'),
|
|
26
|
-
});
|
|
27
|
-
export const WorkerDefinitionSchema = z.object({
|
|
28
|
-
name: z.string().min(1).max(500).describe('Unique worker name'),
|
|
29
|
-
description: z
|
|
30
|
-
.string()
|
|
31
|
-
.max(10_000)
|
|
32
|
-
.describe('Human-readable description of what the worker does'),
|
|
33
|
-
trigger: WorkerTriggerSchema.describe('When this worker should be triggered'),
|
|
34
|
-
handler: z.string().max(4096).describe('Path to handler module'),
|
|
35
|
-
priority: z.number().int().min(1).max(10).describe('Priority 1-10, higher = more important'),
|
|
36
|
-
cooldownMs: z.number().int().min(0).describe('Minimum milliseconds between executions'),
|
|
37
|
-
enabled: z.boolean().describe('Whether the worker is active'),
|
|
38
|
-
tier: z.enum(['free', 'pro']).describe('License tier: free | pro'),
|
|
39
|
-
});
|
|
40
|
-
export const WorkerRegistrySchema = z.object({
|
|
41
|
-
workers: z.array(WorkerDefinitionSchema).max(1000).describe('List of worker definitions'),
|
|
42
|
-
});
|
|
43
|
-
// ---------------------------------------------------------------------------
|
|
44
|
-
// Tool input schemas
|
|
8
|
+
// Tool input schemas (tools/ only — not needed by engine/)
|
|
45
9
|
// ---------------------------------------------------------------------------
|
|
46
10
|
export const WorkerStatusInputSchema = z.object({
|
|
47
11
|
projectId: z.string().min(1).max(500).describe('Project identifier'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workers-schema.js","sourceRoot":"","sources":["../../../src/tools/schemas/workers-schema.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"workers-schema.js","sourceRoot":"","sources":["../../../src/tools/schemas/workers-schema.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,wFAAwF;AACxF,qEAAqE;AAErE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,0EAA0E;AAC1E,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AAExC,8EAA8E;AAC9E,2DAA2D;AAC3D,8EAA8E;AAE9E,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACpE,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,+CAA+C;QAC7C,qGAAqG,CACxG;CACJ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACpE,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,CACP,+GAA+G,CAChH;IACH,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;SAC5F,QAAQ,CACP,qGAAqG,CACtG;IACH,KAAK,EAAE,CAAC;SACL,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;SACzC,QAAQ,EAAE;SACV,QAAQ,CAAC,8EAA8E,CAAC;CAC5F,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/tools/skill-registry/search.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAqB,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAqC/F,wBAAgB,cAAc,IAAI,mBAAmB,EAAE,CA4BtD;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/tools/skill-registry/search.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAqB,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAqC/F,wBAAgB,cAAc,IAAI,mBAAmB,EAAE,CA4BtD;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,UAAU,CAAC,CA8EtB"}
|
|
@@ -62,16 +62,42 @@ export function loadRegistries() {
|
|
|
62
62
|
export async function handleSkillSearch(params) {
|
|
63
63
|
try {
|
|
64
64
|
const registries = loadRegistries();
|
|
65
|
+
// Guard: query must be a non-empty string to avoid returning unfiltered catalog dumps
|
|
66
|
+
const query = typeof params.query === 'string' ? params.query.trim() : '';
|
|
67
|
+
if (query.length === 0) {
|
|
68
|
+
return toolResult(formatSuccess('No query provided', 'Provide a search term to find skills. Example: `skill_search({ query: "testing", projectPath: "..." })`'), { results: [], count: 0 });
|
|
69
|
+
}
|
|
65
70
|
const searchParams = {
|
|
66
|
-
query
|
|
71
|
+
query,
|
|
67
72
|
registry: params.registry,
|
|
68
73
|
stack: params.stack,
|
|
69
|
-
limit: params.limit ?? 10,
|
|
74
|
+
limit: Math.max(1, Math.min(params.limit ?? 10, 50)),
|
|
70
75
|
};
|
|
76
|
+
const enabledCount = registries.filter((r) => {
|
|
77
|
+
if (!r.enabled) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
if (searchParams.registry &&
|
|
81
|
+
searchParams.registry !== 'all' &&
|
|
82
|
+
r.id !== searchParams.registry) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
return true;
|
|
86
|
+
}).length;
|
|
71
87
|
const results = await searchAllRegistries(searchParams, registries);
|
|
72
88
|
const lines = [];
|
|
73
89
|
if (results.length === 0) {
|
|
74
|
-
|
|
90
|
+
if (enabledCount === 0) {
|
|
91
|
+
lines.push('No skill registries are enabled. Check your `skill-registries.json` configuration.');
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
lines.push(`No skills found matching **"${query}"**.`);
|
|
95
|
+
lines.push('');
|
|
96
|
+
lines.push('Suggestions:');
|
|
97
|
+
lines.push('- Try a broader search term (e.g., "test" instead of "unit-testing")');
|
|
98
|
+
lines.push('- Omit the `registry` filter to search all registries');
|
|
99
|
+
lines.push('- Check network connectivity to skill registries');
|
|
100
|
+
}
|
|
75
101
|
}
|
|
76
102
|
else {
|
|
77
103
|
lines.push('| # | Skill | Source | Description |');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/tools/skill-registry/search.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAG5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,MAAM,kBAAkB,GAA0B;IAChD;QACE,EAAE,EAAE,WAAW;QACf,IAAI,EAAE,2BAA2B;QACjC,GAAG,EAAE,sCAAsC;QAC3C,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,IAAI;KACd;IACD;QACE,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,eAAe;QACrB,GAAG,EAAE,uBAAuB;QAC5B,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,IAAI;KACd;IACD;QACE,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,WAAW;QACjB,GAAG,EAAE,mBAAmB;QACxB,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,IAAI;KACd;CACF,CAAC;AAEF,MAAM,UAAU,cAAc;IAC5B,yEAAyE;IACzE,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,oCAAoC,CAAC,CAAC;IAC3E,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,2CAA2C,CAAC,CAAC;IAEhF,KAAK,MAAM,UAAU,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC;QACpD,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,yCAAyC;YACzC,SAAS;QACX,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;YAChB,mCAAmC;YACnC,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAA0B,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;YAClF,OAAO,kBAAkB,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAKvC;IACC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/tools/skill-registry/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
export declare function isMcpServer(knowledge: ProjectKnowledge): boolean;
|
|
3
|
-
export declare function fetchRecommendedSkills(knowledge: ProjectKnowledge): Promise<RecommendedSkill[]>;
|
|
1
|
+
export { fetchRecommendedSkills, isMcpServer } from '../../engine/skills/skills-fetcher.js';
|
|
4
2
|
//# sourceMappingURL=skills-fetcher.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills-fetcher.d.ts","sourceRoot":"","sources":["../../../src/tools/suggest-tooling/skills-fetcher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"skills-fetcher.d.ts","sourceRoot":"","sources":["../../../src/tools/suggest-tooling/skills-fetcher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC"}
|
|
@@ -1,102 +1,4 @@
|
|
|
1
|
-
// tools/suggest-tooling/skills-fetcher.ts —
|
|
2
|
-
//
|
|
3
|
-
|
|
4
|
-
import { fetchUrl } from '../../engine/web-fetcher/http-client.js';
|
|
5
|
-
export function isMcpServer(knowledge) {
|
|
6
|
-
const stackLower = knowledge.stack.map((s) => s.toLowerCase());
|
|
7
|
-
const toolingStr = JSON.stringify(knowledge.tooling).toLowerCase();
|
|
8
|
-
return (stackLower.some((s) => s.includes('mcp') || s.includes('@modelcontextprotocol')) ||
|
|
9
|
-
toolingStr.includes('modelcontextprotocol') ||
|
|
10
|
-
toolingStr.includes('@modelcontextprotocol'));
|
|
11
|
-
}
|
|
12
|
-
export async function fetchRecommendedSkills(knowledge) {
|
|
13
|
-
const skills = [];
|
|
14
|
-
// Always add mcp-builder first for MCP server projects
|
|
15
|
-
if (isMcpServer(knowledge)) {
|
|
16
|
-
skills.push({
|
|
17
|
-
name: 'mcp-builder',
|
|
18
|
-
description: 'Best practices and conventions for building high-quality MCP servers',
|
|
19
|
-
installCommand: 'npx skills add mcp-builder',
|
|
20
|
-
justification: 'Project detected as an MCP server (@modelcontextprotocol detected in stack/tooling)',
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
// Fetch skills.sh catalog in real time (with graceful fallback to hardcoded skills)
|
|
24
|
-
const catalogSkills = await fetchSkillsShCatalog(knowledge.stack, knowledge.language);
|
|
25
|
-
if (catalogSkills.length > 0) {
|
|
26
|
-
skills.push(...catalogSkills);
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
// Fallback: use hardcoded relevant skills when catalog is unavailable or empty
|
|
30
|
-
skills.push(...buildFallbackSkills(knowledge));
|
|
31
|
-
}
|
|
32
|
-
// Deduplicate by name
|
|
33
|
-
const seen = new Set();
|
|
34
|
-
return skills.filter((s) => {
|
|
35
|
-
if (seen.has(s.name)) {
|
|
36
|
-
return false;
|
|
37
|
-
}
|
|
38
|
-
seen.add(s.name);
|
|
39
|
-
return true;
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
async function fetchSkillsShCatalog(stack, language) {
|
|
43
|
-
const stackParam = encodeURIComponent([...stack, language].join(',').toLowerCase());
|
|
44
|
-
const url = `https://skills.sh/api/catalog?stack=${stackParam}`;
|
|
45
|
-
try {
|
|
46
|
-
const response = await fetchUrl(url);
|
|
47
|
-
if (!response) {
|
|
48
|
-
return [];
|
|
49
|
-
}
|
|
50
|
-
const parsed = JSON.parse(response.content);
|
|
51
|
-
return (parsed.skills ?? []).slice(0, 5).map((s) => ({
|
|
52
|
-
name: s.name,
|
|
53
|
-
description: s.description ?? `Skill: ${s.name}`,
|
|
54
|
-
installCommand: s.installCommand ?? `npx skills add ${s.name}`,
|
|
55
|
-
justification: `Relevant to your ${language} stack`,
|
|
56
|
-
}));
|
|
57
|
-
}
|
|
58
|
-
catch {
|
|
59
|
-
/* v8 ignore next */ // JSON.parse errors are unlikely with mocked fetchUrl in tests
|
|
60
|
-
return [];
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
function buildFallbackSkills(knowledge) {
|
|
64
|
-
const skills = [];
|
|
65
|
-
const stackLower = knowledge.stack.map((s) => s.toLowerCase());
|
|
66
|
-
const lang = knowledge.language.toLowerCase();
|
|
67
|
-
if (lang === 'typescript' || lang === 'javascript') {
|
|
68
|
-
skills.push({
|
|
69
|
-
name: 'typescript-patterns',
|
|
70
|
-
description: 'TypeScript best practices, strict mode patterns, and type safety conventions',
|
|
71
|
-
installCommand: 'npx skills add typescript-patterns',
|
|
72
|
-
justification: `Project uses ${knowledge.language}`,
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
if (stackLower.some((s) => s.includes('react'))) {
|
|
76
|
-
skills.push({
|
|
77
|
-
name: 'react-patterns',
|
|
78
|
-
description: 'React component patterns, hooks best practices, and performance optimization',
|
|
79
|
-
installCommand: 'npx skills add react-patterns',
|
|
80
|
-
justification: 'React detected in project stack',
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
if (stackLower.some((s) => s.includes('next'))) {
|
|
84
|
-
skills.push({
|
|
85
|
-
name: 'nextjs-patterns',
|
|
86
|
-
description: 'Next.js App Router patterns, server components, and deployment best practices',
|
|
87
|
-
installCommand: 'npx skills add nextjs-patterns',
|
|
88
|
-
justification: 'Next.js detected in project stack',
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
if (stackLower.some((s) => s.includes('python')) ||
|
|
92
|
-
knowledge.language.toLowerCase() === 'python') {
|
|
93
|
-
skills.push({
|
|
94
|
-
name: 'python-patterns',
|
|
95
|
-
description: 'Python best practices, type hints, async patterns, and testing conventions',
|
|
96
|
-
installCommand: 'npx skills add python-patterns',
|
|
97
|
-
justification: 'Python detected in project stack',
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
return skills;
|
|
101
|
-
}
|
|
1
|
+
// tools/suggest-tooling/skills-fetcher.ts — Re-export from engine
|
|
2
|
+
// Business logic lives in engine/ so engine/ can import it without architecture violations.
|
|
3
|
+
export { fetchRecommendedSkills, isMcpServer } from '../../engine/skills/skills-fetcher.js';
|
|
102
4
|
//# sourceMappingURL=skills-fetcher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills-fetcher.js","sourceRoot":"","sources":["../../../src/tools/suggest-tooling/skills-fetcher.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"skills-fetcher.js","sourceRoot":"","sources":["../../../src/tools/suggest-tooling/skills-fetcher.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,4FAA4F;AAC5F,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record a tool call's token usage to the persistent ledger.
|
|
3
|
+
* Always fire-and-forget — never throws, never blocks the response.
|
|
4
|
+
*/
|
|
5
|
+
export declare function recordToolTokens(toolName: string, projectPath: string, inputArgs: unknown, outputText: string, sessionId: string): void;
|
|
6
|
+
/**
|
|
7
|
+
* Extract output text from a ToolResult for token counting.
|
|
8
|
+
* Concatenates all text content items into a single string.
|
|
9
|
+
*/
|
|
10
|
+
export declare function extractOutputText(result: {
|
|
11
|
+
content: {
|
|
12
|
+
type: string;
|
|
13
|
+
text?: string;
|
|
14
|
+
}[];
|
|
15
|
+
}): string;
|
|
16
|
+
//# sourceMappingURL=token-recording.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-recording.d.ts","sourceRoot":"","sources":["../../src/tools/token-recording.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,OAAO,EAClB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,IAAI,CA2BN;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,GAAG,MAAM,CAIhG"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// tools/token-recording.ts — Fire-and-forget token usage recording for all tool calls.
|
|
2
|
+
// Called by safeWithTelemetry() after each successful tool execution.
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { countTokens, estimateCost } from '../engine/token-optimizer/counter.js';
|
|
5
|
+
import { recordEntry } from '../storage/token-ledger-store.js';
|
|
6
|
+
import { hashProjectPath } from '../storage/base-store.js';
|
|
7
|
+
/**
|
|
8
|
+
* Record a tool call's token usage to the persistent ledger.
|
|
9
|
+
* Always fire-and-forget — never throws, never blocks the response.
|
|
10
|
+
*/
|
|
11
|
+
export function recordToolTokens(toolName, projectPath, inputArgs, outputText, sessionId) {
|
|
12
|
+
try {
|
|
13
|
+
const inputStr = typeof inputArgs === 'string' ? inputArgs : JSON.stringify(inputArgs);
|
|
14
|
+
const inputCount = countTokens(inputStr);
|
|
15
|
+
const outputCount = countTokens(outputText);
|
|
16
|
+
const totalTokens = inputCount.tokens + outputCount.tokens;
|
|
17
|
+
const cost = estimateCost(totalTokens, 'claude-sonnet');
|
|
18
|
+
const entry = {
|
|
19
|
+
id: `TXN-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`,
|
|
20
|
+
timestamp: new Date().toISOString(),
|
|
21
|
+
sessionId,
|
|
22
|
+
toolName,
|
|
23
|
+
model: 'claude-sonnet',
|
|
24
|
+
inputTokens: inputCount.tokens,
|
|
25
|
+
outputTokens: outputCount.tokens,
|
|
26
|
+
totalTokens,
|
|
27
|
+
costUsd: cost.totalCostUsd,
|
|
28
|
+
cached: false,
|
|
29
|
+
};
|
|
30
|
+
const projectHash = hashProjectPath(projectPath);
|
|
31
|
+
const dataDir = join(process.cwd(), 'data');
|
|
32
|
+
void recordEntry(projectHash, dataDir, entry);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// Never fail the tool call due to token recording errors
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Extract output text from a ToolResult for token counting.
|
|
40
|
+
* Concatenates all text content items into a single string.
|
|
41
|
+
*/
|
|
42
|
+
export function extractOutputText(result) {
|
|
43
|
+
return result.content
|
|
44
|
+
.flatMap((item) => (item.type === 'text' && typeof item.text === 'string' ? [item.text] : []))
|
|
45
|
+
.join('\n');
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=token-recording.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-recording.js","sourceRoot":"","sources":["../../src/tools/token-recording.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,sEAAsE;AACtE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAG3D;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,WAAmB,EACnB,SAAkB,EAClB,UAAkB,EAClB,SAAiB;IAEjB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACvF,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,WAAW,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;QAC3D,MAAM,IAAI,GAAG,YAAY,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAExD,MAAM,KAAK,GAAgB;YACzB,EAAE,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YACjE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,SAAS;YACT,QAAQ;YACR,KAAK,EAAE,eAAe;YACtB,WAAW,EAAE,UAAU,CAAC,MAAM;YAC9B,YAAY,EAAE,WAAW,CAAC,MAAM;YAChC,WAAW;YACX,OAAO,EAAE,IAAI,CAAC,YAAY;YAC1B,MAAM,EAAE,KAAK;SACd,CAAC;QAEF,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;QAC5C,KAAK,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,yDAAyD;IAC3D,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAsD;IACtF,OAAO,MAAM,CAAC,OAAO;SAClB,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SAC7F,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { SpecStatus, ComplianceGateResult } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Checks for critical convention violations before allowing a spec to be marked as done.
|
|
4
|
+
* Returns warning messages for critical violations (non-blocking, best-effort).
|
|
5
|
+
*/
|
|
6
|
+
export declare function checkConventionGate(projectId: string): Promise<string[]>;
|
|
7
|
+
/**
|
|
8
|
+
* Runs all non-blocking compliance gates (convention + constitution + compile + lint + test)
|
|
9
|
+
* in parallel. Extracts complexity from handleUpdateStatus.
|
|
10
|
+
*/
|
|
11
|
+
export declare function runComplianceGates(projectId: string, specTitle: string, specTags: string[], newStatus: SpecStatus): Promise<ComplianceGateResult>;
|
|
12
|
+
//# sourceMappingURL=update-status-convention-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-status-convention-gate.d.ts","sourceRoot":"","sources":["../../src/tools/update-status-convention-gate.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAuH1E;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAsB9E;AAMD;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAAE,EAClB,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC,oBAAoB,CAAC,CA0B/B"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
// tools/update-status-convention-gate.ts — SPEC-190
|
|
2
|
+
// Convention and constitution compliance gates for update_status transitions.
|
|
3
|
+
import { execSync } from 'node:child_process';
|
|
4
|
+
import { knowledgeStore } from '../storage/index.js';
|
|
5
|
+
import { parseConventions, scanConventions } from '../engine/convention-scanner/index.js';
|
|
6
|
+
import { checkConstitutionOnTransition } from './update-status-actions.js';
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
// Helpers
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
/** Allowlist: alphanumerics, spaces, and safe shell chars. Rejects ; | $ ` & < > */
|
|
11
|
+
const SAFE_COMMAND_RE = /^[\w\s./:@~=-]+$/;
|
|
12
|
+
function isSafeCommand(cmd) {
|
|
13
|
+
return SAFE_COMMAND_RE.test(cmd);
|
|
14
|
+
}
|
|
15
|
+
function execGate(cmd, cwd, timeoutMs) {
|
|
16
|
+
try {
|
|
17
|
+
const raw = execSync(cmd, {
|
|
18
|
+
cwd,
|
|
19
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
20
|
+
timeout: timeoutMs,
|
|
21
|
+
});
|
|
22
|
+
return { output: raw.toString().trim(), ok: true };
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
const output = err instanceof Error && 'stdout' in err
|
|
26
|
+
? String(err.stdout ?? '')
|
|
27
|
+
: String(err);
|
|
28
|
+
return { output: output.trim(), ok: false };
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function countLintIssues(output) {
|
|
32
|
+
// Handle eslint, tsc, and generic "N problem(s)" patterns
|
|
33
|
+
const problemMatch = /(\d+)\s+problem/i.exec(output);
|
|
34
|
+
if (problemMatch) {
|
|
35
|
+
return parseInt(problemMatch[1] ?? '0', 10);
|
|
36
|
+
}
|
|
37
|
+
// Count non-empty lines as a fallback for unknown lint formats
|
|
38
|
+
return output.split('\n').filter((l) => l.trim().length > 0).length;
|
|
39
|
+
}
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
// Individual gates
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
function checkCompileGate(projectPath, lintCommand) {
|
|
44
|
+
// Prefer tsc --noEmit; fall back to checking if lint command already covers it
|
|
45
|
+
const hasTsc = lintCommand?.includes('tsc') ?? false;
|
|
46
|
+
if (hasTsc) {
|
|
47
|
+
return []; // lint will cover compile
|
|
48
|
+
}
|
|
49
|
+
const { output, ok } = execGate('npx tsc --noEmit', projectPath, 5_000);
|
|
50
|
+
if (ok) {
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
53
|
+
const lines = output.split('\n').filter((l) => l.includes('error TS'));
|
|
54
|
+
if (lines.length === 0) {
|
|
55
|
+
return [];
|
|
56
|
+
}
|
|
57
|
+
const preview = lines.slice(0, 3).join('; ');
|
|
58
|
+
return [`TypeScript compile: ${lines.length} error(s). ${preview}`];
|
|
59
|
+
}
|
|
60
|
+
function checkLintGate(projectPath, lintCmd) {
|
|
61
|
+
if (lintCmd !== null && !isSafeCommand(lintCmd)) {
|
|
62
|
+
console.warn(`[Planu] convention-gate: lintCommand contains unsafe characters — skipping`);
|
|
63
|
+
return [];
|
|
64
|
+
}
|
|
65
|
+
const cmd = lintCmd ?? 'npx eslint src --max-warnings=0 --format=compact 2>&1 || true';
|
|
66
|
+
const { output, ok } = execGate(cmd, projectPath, 10_000);
|
|
67
|
+
if (ok) {
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
const issueCount = countLintIssues(output);
|
|
71
|
+
if (issueCount === 0) {
|
|
72
|
+
return [];
|
|
73
|
+
}
|
|
74
|
+
const preview = output.split('\n').find((l) => l.trim().length > 0) ?? '';
|
|
75
|
+
return [`Lint: ${issueCount} issue(s). ${preview}`];
|
|
76
|
+
}
|
|
77
|
+
function checkTestGate(projectPath, testCmd) {
|
|
78
|
+
if (testCmd !== null && !isSafeCommand(testCmd)) {
|
|
79
|
+
console.warn(`[Planu] convention-gate: testCommand contains unsafe characters — skipping`);
|
|
80
|
+
return [];
|
|
81
|
+
}
|
|
82
|
+
// Run tests with a short timeout — only a warning if they fail
|
|
83
|
+
const cmd = testCmd ?? 'npx vitest run --reporter=verbose 2>&1 | tail -20 || true';
|
|
84
|
+
const { output, ok } = execGate(cmd, projectPath, 30_000);
|
|
85
|
+
if (ok) {
|
|
86
|
+
return [];
|
|
87
|
+
}
|
|
88
|
+
// Extract summary line (e.g. "5 failed" or "FAIL src/foo.test.ts")
|
|
89
|
+
const failLine = output
|
|
90
|
+
.split('\n')
|
|
91
|
+
.reverse()
|
|
92
|
+
.find((l) => /fail|error/i.test(l) && l.trim().length > 0);
|
|
93
|
+
const summary = failLine ??
|
|
94
|
+
output
|
|
95
|
+
.split('\n')
|
|
96
|
+
.filter((l) => l.trim())
|
|
97
|
+
.slice(-1)[0] ??
|
|
98
|
+
'';
|
|
99
|
+
return [`Tests: failed. ${summary.trim()}`];
|
|
100
|
+
}
|
|
101
|
+
// ---------------------------------------------------------------------------
|
|
102
|
+
// Convention gate (existing logic, unchanged)
|
|
103
|
+
// ---------------------------------------------------------------------------
|
|
104
|
+
/**
|
|
105
|
+
* Checks for critical convention violations before allowing a spec to be marked as done.
|
|
106
|
+
* Returns warning messages for critical violations (non-blocking, best-effort).
|
|
107
|
+
*/
|
|
108
|
+
export async function checkConventionGate(projectId) {
|
|
109
|
+
try {
|
|
110
|
+
const knowledge = await knowledgeStore.getKnowledge(projectId);
|
|
111
|
+
if (!knowledge?.projectPath) {
|
|
112
|
+
return [];
|
|
113
|
+
}
|
|
114
|
+
const rules = parseConventions(knowledge.projectPath);
|
|
115
|
+
if (rules.length === 0) {
|
|
116
|
+
return [];
|
|
117
|
+
}
|
|
118
|
+
const violations = scanConventions(knowledge.projectPath, rules);
|
|
119
|
+
const critical = violations.filter((v) => v.severity === 'critical');
|
|
120
|
+
if (critical.length === 0) {
|
|
121
|
+
return [];
|
|
122
|
+
}
|
|
123
|
+
return critical.slice(0, 5).map((v) => `${v.category}: ${v.message} (${v.file})`);
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
return [];
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// ---------------------------------------------------------------------------
|
|
130
|
+
// Main gate runner
|
|
131
|
+
// ---------------------------------------------------------------------------
|
|
132
|
+
/**
|
|
133
|
+
* Runs all non-blocking compliance gates (convention + constitution + compile + lint + test)
|
|
134
|
+
* in parallel. Extracts complexity from handleUpdateStatus.
|
|
135
|
+
*/
|
|
136
|
+
export async function runComplianceGates(projectId, specTitle, specTags, newStatus) {
|
|
137
|
+
const isDone = newStatus === 'done';
|
|
138
|
+
const isApprovedOrDone = newStatus === 'approved' || isDone;
|
|
139
|
+
// Load knowledge once — needed for project path and commands
|
|
140
|
+
const knowledge = isDone ? await knowledgeStore.getKnowledge(projectId) : null;
|
|
141
|
+
const projectPath = knowledge?.projectPath ?? null;
|
|
142
|
+
const [conventionWarnings, constitutionWarnings, compileWarnings, lintWarnings, testWarnings] = await Promise.all([
|
|
143
|
+
isDone ? checkConventionGate(projectId) : Promise.resolve([]),
|
|
144
|
+
isApprovedOrDone
|
|
145
|
+
? checkConstitutionOnTransition(projectId, specTitle, specTags)
|
|
146
|
+
: Promise.resolve([]),
|
|
147
|
+
isDone && projectPath
|
|
148
|
+
? Promise.resolve(checkCompileGate(projectPath, knowledge?.lintCommand ?? null))
|
|
149
|
+
: Promise.resolve([]),
|
|
150
|
+
isDone && projectPath
|
|
151
|
+
? Promise.resolve(checkLintGate(projectPath, knowledge?.lintCommand ?? null))
|
|
152
|
+
: Promise.resolve([]),
|
|
153
|
+
isDone && projectPath
|
|
154
|
+
? Promise.resolve(checkTestGate(projectPath, knowledge?.testCommand ?? null))
|
|
155
|
+
: Promise.resolve([]),
|
|
156
|
+
]);
|
|
157
|
+
return { conventionWarnings, constitutionWarnings, compileWarnings, lintWarnings, testWarnings };
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=update-status-convention-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-status-convention-gate.js","sourceRoot":"","sources":["../../src/tools/update-status-convention-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-reconcile token costs when a spec transitions to 'done'.
|
|
3
|
+
* Compares pre-execution estimates stored in ledger entries against actuals.
|
|
4
|
+
* Fire-and-forget safe: always returns null on any error.
|
|
5
|
+
*/
|
|
6
|
+
export declare function autoReconcileOnDone(specId: string, projectHash: string): Promise<string | null>;
|
|
7
|
+
//# sourceMappingURL=update-status-reconcile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-status-reconcile.d.ts","sourceRoot":"","sources":["../../src/tools/update-status-reconcile.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA4CxB"}
|