@planu/cli 0.90.2 → 0.91.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/dist/config/license-plans.json +3 -1
- package/dist/engine/batch-script-generator/index.d.ts +6 -0
- package/dist/engine/batch-script-generator/index.d.ts.map +1 -0
- package/dist/engine/batch-script-generator/index.js +126 -0
- package/dist/engine/batch-script-generator/index.js.map +1 -0
- package/dist/engine/ci-generator/index.d.ts.map +1 -1
- package/dist/engine/ci-generator/index.js +32 -1
- package/dist/engine/ci-generator/index.js.map +1 -1
- package/dist/engine/ci-generator/output-formats.d.ts +15 -0
- package/dist/engine/ci-generator/output-formats.d.ts.map +1 -0
- package/dist/engine/ci-generator/output-formats.js +52 -0
- package/dist/engine/ci-generator/output-formats.js.map +1 -0
- package/dist/engine/claude-config-auditor/claudemd-auditor.d.ts.map +1 -1
- package/dist/engine/claude-config-auditor/claudemd-auditor.js +139 -31
- package/dist/engine/claude-config-auditor/claudemd-auditor.js.map +1 -1
- package/dist/engine/claude-config-auditor/rules-auditor.d.ts.map +1 -1
- package/dist/engine/claude-config-auditor/rules-auditor.js +87 -49
- package/dist/engine/claude-config-auditor/rules-auditor.js.map +1 -1
- package/dist/engine/claude-config-auditor/scoring.d.ts.map +1 -1
- package/dist/engine/claude-config-auditor/scoring.js +37 -1
- package/dist/engine/claude-config-auditor/scoring.js.map +1 -1
- package/dist/engine/claude-config-auditor/settings-auditor.d.ts.map +1 -1
- package/dist/engine/claude-config-auditor/settings-auditor.js +55 -40
- package/dist/engine/claude-config-auditor/settings-auditor.js.map +1 -1
- package/dist/engine/config-schemas.d.ts.map +1 -1
- package/dist/engine/config-schemas.js +1 -0
- package/dist/engine/config-schemas.js.map +1 -1
- package/dist/engine/context-advisor/btw-advisor.d.ts +11 -0
- package/dist/engine/context-advisor/btw-advisor.d.ts.map +1 -0
- package/dist/engine/context-advisor/btw-advisor.js +29 -0
- package/dist/engine/context-advisor/btw-advisor.js.map +1 -0
- package/dist/engine/facilitate/context-loader.d.ts +12 -0
- package/dist/engine/facilitate/context-loader.d.ts.map +1 -0
- package/dist/engine/facilitate/context-loader.js +156 -0
- package/dist/engine/facilitate/context-loader.js.map +1 -0
- package/dist/engine/facilitate/intent-classifier.d.ts +6 -0
- package/dist/engine/facilitate/intent-classifier.d.ts.map +1 -0
- package/dist/engine/facilitate/intent-classifier.js +153 -0
- package/dist/engine/facilitate/intent-classifier.js.map +1 -0
- package/dist/engine/facilitate/plan-parser.d.ts +7 -0
- package/dist/engine/facilitate/plan-parser.d.ts.map +1 -0
- package/dist/engine/facilitate/plan-parser.js +115 -0
- package/dist/engine/facilitate/plan-parser.js.map +1 -0
- package/dist/engine/facilitate/router.d.ts +6 -0
- package/dist/engine/facilitate/router.d.ts.map +1 -0
- package/dist/engine/facilitate/router.js +71 -0
- package/dist/engine/facilitate/router.js.map +1 -0
- package/dist/engine/hooks/context-injector.d.ts +11 -0
- package/dist/engine/hooks/context-injector.d.ts.map +1 -0
- package/dist/engine/hooks/context-injector.js +163 -0
- package/dist/engine/hooks/context-injector.js.map +1 -0
- package/dist/engine/hooks/hook-templates.d.ts +16 -0
- package/dist/engine/hooks/hook-templates.d.ts.map +1 -0
- package/dist/engine/hooks/hook-templates.js +148 -0
- package/dist/engine/hooks/hook-templates.js.map +1 -0
- package/dist/engine/hooks/plan-mode-detector.d.ts +27 -0
- package/dist/engine/hooks/plan-mode-detector.d.ts.map +1 -0
- package/dist/engine/hooks/plan-mode-detector.js +68 -0
- package/dist/engine/hooks/plan-mode-detector.js.map +1 -0
- package/dist/engine/hooks/plan-mode-scripts.d.ts +10 -0
- package/dist/engine/hooks/plan-mode-scripts.d.ts.map +1 -0
- package/dist/engine/hooks/plan-mode-scripts.js +45 -0
- package/dist/engine/hooks/plan-mode-scripts.js.map +1 -0
- package/dist/engine/model-router/complexity-analyzer.d.ts +9 -1
- package/dist/engine/model-router/complexity-analyzer.d.ts.map +1 -1
- package/dist/engine/model-router/complexity-analyzer.js +44 -1
- package/dist/engine/model-router/complexity-analyzer.js.map +1 -1
- package/dist/engine/model-router/rules-engine.d.ts.map +1 -1
- package/dist/engine/model-router/rules-engine.js +14 -1
- package/dist/engine/model-router/rules-engine.js.map +1 -1
- package/dist/engine/nfr-profile-detector.d.ts.map +1 -1
- package/dist/engine/nfr-profile-detector.js +2 -1
- package/dist/engine/nfr-profile-detector.js.map +1 -1
- package/dist/engine/spec-coverage/core.js.map +1 -1
- package/dist/engine/team-planner/writer-reviewer.d.ts +12 -0
- package/dist/engine/team-planner/writer-reviewer.d.ts.map +1 -0
- package/dist/engine/team-planner/writer-reviewer.js +48 -0
- package/dist/engine/team-planner/writer-reviewer.js.map +1 -0
- package/dist/engine/tool-groups/group-manager.js.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/storage/drift-cache-store.js.map +1 -1
- package/dist/storage/error-telemetry-store.js.map +1 -1
- package/dist/storage/federation-store.js.map +1 -1
- package/dist/storage/global-store.js.map +1 -1
- package/dist/storage/living-dashboard-store.js.map +1 -1
- package/dist/storage/metrics-store.js.map +1 -1
- package/dist/storage/rbac-store.js.map +1 -1
- package/dist/storage/spec-observability-store.js.map +1 -1
- package/dist/storage/worker-metrics-store.js.map +1 -1
- package/dist/storage/worker-store.js.map +1 -1
- package/dist/tools/checkpoint-handler.d.ts.map +1 -1
- package/dist/tools/checkpoint-handler.js +11 -0
- package/dist/tools/checkpoint-handler.js.map +1 -1
- package/dist/tools/clarify-requirements/interview-mode.d.ts +42 -0
- package/dist/tools/clarify-requirements/interview-mode.d.ts.map +1 -0
- package/dist/tools/clarify-requirements/interview-mode.js +342 -0
- package/dist/tools/clarify-requirements/interview-mode.js.map +1 -0
- package/dist/tools/configure-workers-handler.d.ts.map +1 -1
- package/dist/tools/configure-workers-handler.js +81 -0
- package/dist/tools/configure-workers-handler.js.map +1 -1
- package/dist/tools/facilitate.d.ts +1 -5
- package/dist/tools/facilitate.d.ts.map +1 -1
- package/dist/tools/facilitate.js +100 -23
- package/dist/tools/facilitate.js.map +1 -1
- package/dist/tools/generate-automation-guide.d.ts +10 -0
- package/dist/tools/generate-automation-guide.d.ts.map +1 -0
- package/dist/tools/generate-automation-guide.js +222 -0
- package/dist/tools/generate-automation-guide.js.map +1 -0
- package/dist/tools/generate-batch-script.d.ts +27 -0
- package/dist/tools/generate-batch-script.d.ts.map +1 -0
- package/dist/tools/generate-batch-script.js +77 -0
- package/dist/tools/generate-batch-script.js.map +1 -0
- package/dist/tools/generate-sub-agent.d.ts.map +1 -1
- package/dist/tools/generate-sub-agent.js +16 -2
- package/dist/tools/generate-sub-agent.js.map +1 -1
- package/dist/tools/git/branch-ops.d.ts +18 -0
- package/dist/tools/git/branch-ops.d.ts.map +1 -1
- package/dist/tools/git/branch-ops.js +121 -0
- package/dist/tools/git/branch-ops.js.map +1 -1
- package/dist/tools/git/pr-ops.d.ts.map +1 -1
- package/dist/tools/git/pr-ops.js +7 -0
- package/dist/tools/git/pr-ops.js.map +1 -1
- package/dist/tools/init-project/handler.d.ts.map +1 -1
- package/dist/tools/init-project/handler.js +4 -1
- package/dist/tools/init-project/handler.js.map +1 -1
- package/dist/tools/init-project/hooks-configurator.d.ts +17 -0
- package/dist/tools/init-project/hooks-configurator.d.ts.map +1 -0
- package/dist/tools/init-project/hooks-configurator.js +102 -0
- package/dist/tools/init-project/hooks-configurator.js.map +1 -0
- package/dist/tools/init-project/planu-workflow-generator.d.ts +21 -0
- package/dist/tools/init-project/planu-workflow-generator.d.ts.map +1 -0
- package/dist/tools/init-project/planu-workflow-generator.js +73 -0
- package/dist/tools/init-project/planu-workflow-generator.js.map +1 -0
- package/dist/tools/init-project/rules-generator.d.ts +15 -0
- package/dist/tools/init-project/rules-generator.d.ts.map +1 -0
- package/dist/tools/init-project/rules-generator.js +110 -0
- package/dist/tools/init-project/rules-generator.js.map +1 -0
- package/dist/tools/init-project/scaffold-writer.d.ts +3 -0
- package/dist/tools/init-project/scaffold-writer.d.ts.map +1 -1
- package/dist/tools/init-project/scaffold-writer.js +33 -0
- package/dist/tools/init-project/scaffold-writer.js.map +1 -1
- package/dist/tools/integrate-pm.js.map +1 -1
- package/dist/tools/list-sessions.d.ts.map +1 -1
- package/dist/tools/list-sessions.js +8 -0
- package/dist/tools/list-sessions.js.map +1 -1
- package/dist/tools/manage-git.d.ts.map +1 -1
- package/dist/tools/manage-git.js +15 -1
- package/dist/tools/manage-git.js.map +1 -1
- package/dist/tools/orchestrate/state.js.map +1 -1
- package/dist/tools/recommend-model-handler.d.ts.map +1 -1
- package/dist/tools/recommend-model-handler.js +7 -0
- package/dist/tools/recommend-model-handler.js.map +1 -1
- package/dist/tools/register-facilitator-tools.d.ts.map +1 -1
- package/dist/tools/register-facilitator-tools.js +12 -7
- package/dist/tools/register-facilitator-tools.js.map +1 -1
- package/dist/tools/register-generate-automation-guide.d.ts +3 -0
- package/dist/tools/register-generate-automation-guide.d.ts.map +1 -0
- package/dist/tools/register-generate-automation-guide.js +10 -0
- package/dist/tools/register-generate-automation-guide.js.map +1 -0
- package/dist/tools/register-generate-batch-script.d.ts +3 -0
- package/dist/tools/register-generate-batch-script.d.ts.map +1 -0
- package/dist/tools/register-generate-batch-script.js +10 -0
- package/dist/tools/register-generate-batch-script.js.map +1 -0
- package/dist/tools/register-hooks-tools.d.ts.map +1 -1
- package/dist/tools/register-hooks-tools.js +27 -0
- package/dist/tools/register-hooks-tools.js.map +1 -1
- package/dist/tools/register-platform-tools/design-stack-tools.d.ts.map +1 -1
- package/dist/tools/register-platform-tools/design-stack-tools.js +4 -0
- package/dist/tools/register-platform-tools/design-stack-tools.js.map +1 -1
- package/dist/tools/restore-session.d.ts.map +1 -1
- package/dist/tools/restore-session.js +10 -0
- package/dist/tools/restore-session.js.map +1 -1
- package/dist/tools/schemas/ide-config.d.ts +2 -2
- package/dist/tools/schemas/workers-schema.d.ts +1 -0
- package/dist/tools/schemas/workers-schema.d.ts.map +1 -1
- package/dist/tools/schemas/workers-schema.js +10 -2
- package/dist/tools/schemas/workers-schema.js.map +1 -1
- package/dist/tools/start-hooks.d.ts.map +1 -1
- package/dist/tools/start-hooks.js +104 -1
- package/dist/tools/start-hooks.js.map +1 -1
- package/dist/tools/status-handler.d.ts.map +1 -1
- package/dist/tools/status-handler.js +9 -0
- package/dist/tools/status-handler.js.map +1 -1
- package/dist/types/analysis.d.ts +8 -0
- package/dist/types/analysis.d.ts.map +1 -1
- package/dist/types/batch-script.d.ts +36 -0
- package/dist/types/batch-script.d.ts.map +1 -0
- package/dist/types/batch-script.js +3 -0
- package/dist/types/batch-script.js.map +1 -0
- package/dist/types/ci.d.ts +4 -0
- package/dist/types/ci.d.ts.map +1 -1
- package/dist/types/common/tech-enums.d.ts +1 -1
- package/dist/types/common/tech-enums.d.ts.map +1 -1
- package/dist/types/execution.d.ts +9 -0
- package/dist/types/execution.d.ts.map +1 -1
- package/dist/types/facilitator.d.ts +67 -0
- package/dist/types/facilitator.d.ts.map +1 -1
- package/dist/types/file-hooks.d.ts +7 -0
- package/dist/types/file-hooks.d.ts.map +1 -1
- package/dist/types/file-hooks.js +0 -1
- package/dist/types/file-hooks.js.map +1 -1
- package/dist/types/git.d.ts +12 -0
- package/dist/types/git.d.ts.map +1 -1
- package/dist/types/hooks.d.ts +77 -0
- package/dist/types/hooks.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -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/model-routing.d.ts +16 -0
- package/dist/types/model-routing.d.ts.map +1 -1
- package/dist/types/project/planu-config.d.ts +6 -0
- package/dist/types/project/planu-config.d.ts.map +1 -1
- package/dist/types/session.d.ts +2 -0
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/stack/recommend.d.ts +1 -0
- package/dist/types/stack/recommend.d.ts.map +1 -1
- package/dist/types/status.d.ts +7 -0
- package/dist/types/status.d.ts.map +1 -1
- package/dist/types/team-planner.d.ts +18 -0
- package/dist/types/team-planner.d.ts.map +1 -1
- package/dist/types/workers.d.ts +1 -1
- package/dist/types/workers.d.ts.map +1 -1
- package/package.json +10 -10
- package/src/config/license-plans.json +3 -1
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export type InterviewDimension = 'technical' | 'ux' | 'edge-cases' | 'tradeoffs' | 'security' | 'performance' | 'integration';
|
|
2
|
+
export interface CoverageMap {
|
|
3
|
+
technical: boolean;
|
|
4
|
+
ux: boolean;
|
|
5
|
+
'edge-cases': boolean;
|
|
6
|
+
tradeoffs: boolean;
|
|
7
|
+
security: boolean;
|
|
8
|
+
performance: boolean;
|
|
9
|
+
integration: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface InterviewState {
|
|
12
|
+
sessionId: string;
|
|
13
|
+
coverageMap: CoverageMap;
|
|
14
|
+
completionPercent: number;
|
|
15
|
+
accumulatedAnswers: Record<string, string>;
|
|
16
|
+
nextDimension: InterviewDimension | null;
|
|
17
|
+
ready: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Analyzes answers to update which dimensions are covered.
|
|
21
|
+
* Merges with an existing coverage map if provided.
|
|
22
|
+
*/
|
|
23
|
+
export declare function updateCoverageFromAnswers(answers: Record<string, string>, existing?: CoverageMap): CoverageMap;
|
|
24
|
+
/**
|
|
25
|
+
* Returns the lowest-priority uncovered dimension, or null if all are covered.
|
|
26
|
+
*/
|
|
27
|
+
export declare function pickNextDimension(coverage: CoverageMap): InterviewDimension | null;
|
|
28
|
+
/**
|
|
29
|
+
* Generates a targeted follow-up question for a specific dimension.
|
|
30
|
+
* Takes existing answers into account to avoid repeating covered ground.
|
|
31
|
+
*/
|
|
32
|
+
export declare function generateDimensionQuestion(dimension: InterviewDimension, topic: string, answers: Record<string, string>): string;
|
|
33
|
+
/**
|
|
34
|
+
* Computes completion percentage based on how many dimensions are covered (0–100).
|
|
35
|
+
*/
|
|
36
|
+
export declare function computeCompletion(coverage: CoverageMap): number;
|
|
37
|
+
/**
|
|
38
|
+
* Returns true if the topic is too simple for interview mode.
|
|
39
|
+
* Delegates to isShortTopic from questions.ts.
|
|
40
|
+
*/
|
|
41
|
+
export declare function shouldSkipInterview(topic: string): boolean;
|
|
42
|
+
//# sourceMappingURL=interview-mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interview-mode.d.ts","sourceRoot":"","sources":["../../../src/tools/clarify-requirements/interview-mode.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,kBAAkB,GAC1B,WAAW,GACX,IAAI,GACJ,YAAY,GACZ,WAAW,GACX,UAAU,GACV,aAAa,GACb,aAAa,CAAC;AAElB,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,EAAE,EAAE,OAAO,CAAC;IACZ,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,aAAa,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACzC,KAAK,EAAE,OAAO,CAAC;CAChB;AAyRD;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,QAAQ,CAAC,EAAE,WAAW,GACrB,WAAW,CA2Bb;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,WAAW,GAAG,kBAAkB,GAAG,IAAI,CAOlF;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,kBAAkB,EAC7B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,MAAM,CAaR;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,CAI/D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE1D"}
|
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
// tools/clarify-requirements/interview-mode.ts — Structured Interview Mode (SPEC-252)
|
|
2
|
+
// Tracks coverage across 7 dimensions and guides toward create_spec
|
|
3
|
+
import { isShortTopic } from './questions.js';
|
|
4
|
+
/** Keywords per dimension used to detect coverage from answer text. */
|
|
5
|
+
const DIMENSION_KEYWORDS = {
|
|
6
|
+
technical: [
|
|
7
|
+
'typescript',
|
|
8
|
+
'javascript',
|
|
9
|
+
'python',
|
|
10
|
+
'java',
|
|
11
|
+
'rust',
|
|
12
|
+
'go',
|
|
13
|
+
'database',
|
|
14
|
+
'sql',
|
|
15
|
+
'nosql',
|
|
16
|
+
'api',
|
|
17
|
+
'rest',
|
|
18
|
+
'graphql',
|
|
19
|
+
'grpc',
|
|
20
|
+
'microservice',
|
|
21
|
+
'monolith',
|
|
22
|
+
'architecture',
|
|
23
|
+
'framework',
|
|
24
|
+
'library',
|
|
25
|
+
'sdk',
|
|
26
|
+
'algorithm',
|
|
27
|
+
'data structure',
|
|
28
|
+
'cache',
|
|
29
|
+
'queue',
|
|
30
|
+
'message broker',
|
|
31
|
+
'docker',
|
|
32
|
+
'kubernetes',
|
|
33
|
+
'serverless',
|
|
34
|
+
'function',
|
|
35
|
+
'endpoint',
|
|
36
|
+
'backend',
|
|
37
|
+
'frontend',
|
|
38
|
+
'fullstack',
|
|
39
|
+
'stack',
|
|
40
|
+
'implementation',
|
|
41
|
+
'deploy',
|
|
42
|
+
'build',
|
|
43
|
+
'compile',
|
|
44
|
+
'runtime',
|
|
45
|
+
],
|
|
46
|
+
ux: [
|
|
47
|
+
'user',
|
|
48
|
+
'ui',
|
|
49
|
+
'interface',
|
|
50
|
+
'ux',
|
|
51
|
+
'experience',
|
|
52
|
+
'design',
|
|
53
|
+
'layout',
|
|
54
|
+
'screen',
|
|
55
|
+
'page',
|
|
56
|
+
'form',
|
|
57
|
+
'input',
|
|
58
|
+
'button',
|
|
59
|
+
'menu',
|
|
60
|
+
'navigation',
|
|
61
|
+
'mobile',
|
|
62
|
+
'responsive',
|
|
63
|
+
'accessible',
|
|
64
|
+
'accessibility',
|
|
65
|
+
'a11y',
|
|
66
|
+
'wcag',
|
|
67
|
+
'flow',
|
|
68
|
+
'journey',
|
|
69
|
+
'onboarding',
|
|
70
|
+
'dashboard',
|
|
71
|
+
'view',
|
|
72
|
+
'visual',
|
|
73
|
+
'theme',
|
|
74
|
+
'color',
|
|
75
|
+
'typography',
|
|
76
|
+
'component',
|
|
77
|
+
'widget',
|
|
78
|
+
],
|
|
79
|
+
'edge-cases': [
|
|
80
|
+
'edge case',
|
|
81
|
+
'corner case',
|
|
82
|
+
'error',
|
|
83
|
+
'failure',
|
|
84
|
+
'invalid',
|
|
85
|
+
'empty',
|
|
86
|
+
'null',
|
|
87
|
+
'undefined',
|
|
88
|
+
'exception',
|
|
89
|
+
'boundary',
|
|
90
|
+
'limit',
|
|
91
|
+
'overflow',
|
|
92
|
+
'timeout',
|
|
93
|
+
'retry',
|
|
94
|
+
'fallback',
|
|
95
|
+
'race condition',
|
|
96
|
+
'concurrent',
|
|
97
|
+
'duplicate',
|
|
98
|
+
'missing',
|
|
99
|
+
'malformed',
|
|
100
|
+
'validation',
|
|
101
|
+
'constraint',
|
|
102
|
+
'maximum',
|
|
103
|
+
'minimum',
|
|
104
|
+
'zero',
|
|
105
|
+
'negative',
|
|
106
|
+
'large',
|
|
107
|
+
'empty list',
|
|
108
|
+
'not found',
|
|
109
|
+
'404',
|
|
110
|
+
'conflict',
|
|
111
|
+
],
|
|
112
|
+
tradeoffs: [
|
|
113
|
+
'tradeoff',
|
|
114
|
+
'trade-off',
|
|
115
|
+
'vs',
|
|
116
|
+
'versus',
|
|
117
|
+
'alternative',
|
|
118
|
+
'option',
|
|
119
|
+
'approach',
|
|
120
|
+
'decision',
|
|
121
|
+
'pros',
|
|
122
|
+
'cons',
|
|
123
|
+
'advantage',
|
|
124
|
+
'disadvantage',
|
|
125
|
+
'balance',
|
|
126
|
+
'priority',
|
|
127
|
+
'complexity',
|
|
128
|
+
'simplicity',
|
|
129
|
+
'maintainability',
|
|
130
|
+
'scalability',
|
|
131
|
+
'cost',
|
|
132
|
+
'benefit',
|
|
133
|
+
'risk',
|
|
134
|
+
'impact',
|
|
135
|
+
'consistency',
|
|
136
|
+
'availability',
|
|
137
|
+
'partition',
|
|
138
|
+
'cap theorem',
|
|
139
|
+
'eventual',
|
|
140
|
+
'strong consistency',
|
|
141
|
+
],
|
|
142
|
+
security: [
|
|
143
|
+
'security',
|
|
144
|
+
'auth',
|
|
145
|
+
'authentication',
|
|
146
|
+
'authorization',
|
|
147
|
+
'permission',
|
|
148
|
+
'role',
|
|
149
|
+
'rbac',
|
|
150
|
+
'jwt',
|
|
151
|
+
'token',
|
|
152
|
+
'session',
|
|
153
|
+
'cookie',
|
|
154
|
+
'csrf',
|
|
155
|
+
'xss',
|
|
156
|
+
'sql injection',
|
|
157
|
+
'sanitize',
|
|
158
|
+
'encrypt',
|
|
159
|
+
'encryption',
|
|
160
|
+
'https',
|
|
161
|
+
'tls',
|
|
162
|
+
'ssl',
|
|
163
|
+
'secret',
|
|
164
|
+
'credential',
|
|
165
|
+
'password',
|
|
166
|
+
'hash',
|
|
167
|
+
'salt',
|
|
168
|
+
'oauth',
|
|
169
|
+
'saml',
|
|
170
|
+
'sso',
|
|
171
|
+
'rate limit',
|
|
172
|
+
'ddos',
|
|
173
|
+
'audit log',
|
|
174
|
+
'pii',
|
|
175
|
+
'gdpr',
|
|
176
|
+
'data protection',
|
|
177
|
+
'vulnerability',
|
|
178
|
+
'threat',
|
|
179
|
+
'attack',
|
|
180
|
+
'penetration',
|
|
181
|
+
],
|
|
182
|
+
performance: [
|
|
183
|
+
'performance',
|
|
184
|
+
'latency',
|
|
185
|
+
'throughput',
|
|
186
|
+
'response time',
|
|
187
|
+
'speed',
|
|
188
|
+
'fast',
|
|
189
|
+
'slow',
|
|
190
|
+
'optimization',
|
|
191
|
+
'cache',
|
|
192
|
+
'caching',
|
|
193
|
+
'cdn',
|
|
194
|
+
'load',
|
|
195
|
+
'scale',
|
|
196
|
+
'concurrent',
|
|
197
|
+
'async',
|
|
198
|
+
'parallel',
|
|
199
|
+
'batch',
|
|
200
|
+
'benchmark',
|
|
201
|
+
'profile',
|
|
202
|
+
'metric',
|
|
203
|
+
'monitor',
|
|
204
|
+
'sla',
|
|
205
|
+
'p99',
|
|
206
|
+
'p95',
|
|
207
|
+
'millisecond',
|
|
208
|
+
'second',
|
|
209
|
+
'rps',
|
|
210
|
+
'tps',
|
|
211
|
+
'qps',
|
|
212
|
+
'memory',
|
|
213
|
+
'cpu',
|
|
214
|
+
'bandwidth',
|
|
215
|
+
'bottleneck',
|
|
216
|
+
],
|
|
217
|
+
integration: [
|
|
218
|
+
'integration',
|
|
219
|
+
'integrate',
|
|
220
|
+
'api',
|
|
221
|
+
'webhook',
|
|
222
|
+
'event',
|
|
223
|
+
'third-party',
|
|
224
|
+
'external',
|
|
225
|
+
'service',
|
|
226
|
+
'provider',
|
|
227
|
+
'vendor',
|
|
228
|
+
'sdk',
|
|
229
|
+
'library',
|
|
230
|
+
'plugin',
|
|
231
|
+
'connector',
|
|
232
|
+
'adapter',
|
|
233
|
+
'interface',
|
|
234
|
+
'contract',
|
|
235
|
+
'protocol',
|
|
236
|
+
'format',
|
|
237
|
+
'json',
|
|
238
|
+
'xml',
|
|
239
|
+
'csv',
|
|
240
|
+
'import',
|
|
241
|
+
'export',
|
|
242
|
+
'sync',
|
|
243
|
+
'async',
|
|
244
|
+
'push',
|
|
245
|
+
'pull',
|
|
246
|
+
'poll',
|
|
247
|
+
'stream',
|
|
248
|
+
'batch',
|
|
249
|
+
'migration',
|
|
250
|
+
'interop',
|
|
251
|
+
],
|
|
252
|
+
};
|
|
253
|
+
/** Priority order for picking the next uncovered dimension. */
|
|
254
|
+
const DIMENSION_PRIORITY = [
|
|
255
|
+
'technical',
|
|
256
|
+
'security',
|
|
257
|
+
'edge-cases',
|
|
258
|
+
'performance',
|
|
259
|
+
'integration',
|
|
260
|
+
'tradeoffs',
|
|
261
|
+
'ux',
|
|
262
|
+
];
|
|
263
|
+
/** Questions template per dimension. Avoids trivial things a senior dev already knows. */
|
|
264
|
+
const DIMENSION_QUESTION_TEMPLATES = {
|
|
265
|
+
technical: (topic) => `For "${topic}", which architectural constraints or technology choices are non-negotiable — and which are open to discussion?`,
|
|
266
|
+
ux: (topic) => `Who are the distinct user personas for "${topic}", and what are the critical interaction flows that must feel seamless?`,
|
|
267
|
+
'edge-cases': (topic) => `What are the failure modes for "${topic}" that could silently corrupt data or leave the system in an inconsistent state?`,
|
|
268
|
+
tradeoffs: (topic) => `What tradeoffs are you willing to accept for "${topic}" — e.g., consistency vs. availability, simplicity vs. extensibility, speed to ship vs. completeness?`,
|
|
269
|
+
security: (topic) => `What is the threat model for "${topic}"? Which data is sensitive, who are the adversaries, and which attack vectors are in scope?`,
|
|
270
|
+
performance: (topic) => `What are the concrete SLAs for "${topic}" — target latency (p95/p99), throughput (rps), and acceptable degradation under load?`,
|
|
271
|
+
integration: (topic) => `Which external systems or third-party services must "${topic}" integrate with, and what are the contract/version constraints?`,
|
|
272
|
+
};
|
|
273
|
+
/**
|
|
274
|
+
* Analyzes answers to update which dimensions are covered.
|
|
275
|
+
* Merges with an existing coverage map if provided.
|
|
276
|
+
*/
|
|
277
|
+
export function updateCoverageFromAnswers(answers, existing) {
|
|
278
|
+
const base = existing ?? {
|
|
279
|
+
technical: false,
|
|
280
|
+
ux: false,
|
|
281
|
+
'edge-cases': false,
|
|
282
|
+
tradeoffs: false,
|
|
283
|
+
security: false,
|
|
284
|
+
performance: false,
|
|
285
|
+
integration: false,
|
|
286
|
+
};
|
|
287
|
+
const allText = Object.values(answers).join(' ').toLowerCase();
|
|
288
|
+
const dimensions = Object.keys(DIMENSION_KEYWORDS);
|
|
289
|
+
const updated = { ...base };
|
|
290
|
+
for (const dim of dimensions) {
|
|
291
|
+
if (updated[dim]) {
|
|
292
|
+
continue;
|
|
293
|
+
} // already covered
|
|
294
|
+
const keywords = DIMENSION_KEYWORDS[dim];
|
|
295
|
+
if (keywords.some((kw) => allText.includes(kw))) {
|
|
296
|
+
updated[dim] = true;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
return updated;
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Returns the lowest-priority uncovered dimension, or null if all are covered.
|
|
303
|
+
*/
|
|
304
|
+
export function pickNextDimension(coverage) {
|
|
305
|
+
for (const dim of DIMENSION_PRIORITY) {
|
|
306
|
+
if (!coverage[dim]) {
|
|
307
|
+
return dim;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
return null;
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Generates a targeted follow-up question for a specific dimension.
|
|
314
|
+
* Takes existing answers into account to avoid repeating covered ground.
|
|
315
|
+
*/
|
|
316
|
+
export function generateDimensionQuestion(dimension, topic, answers) {
|
|
317
|
+
const alreadyMentioned = Object.values(answers).join(' ').toLowerCase();
|
|
318
|
+
const baseQuestion = DIMENSION_QUESTION_TEMPLATES[dimension](topic);
|
|
319
|
+
// Add context hint if the answer set is non-empty and hints at partial coverage
|
|
320
|
+
const keywords = DIMENSION_KEYWORDS[dimension];
|
|
321
|
+
const partiallyMentioned = keywords.filter((kw) => alreadyMentioned.includes(kw));
|
|
322
|
+
if (partiallyMentioned.length > 0 && partiallyMentioned.length < 3) {
|
|
323
|
+
return `${baseQuestion} (You mentioned ${partiallyMentioned.slice(0, 2).join(', ')} — go deeper on constraints and non-obvious implications.)`;
|
|
324
|
+
}
|
|
325
|
+
return baseQuestion;
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Computes completion percentage based on how many dimensions are covered (0–100).
|
|
329
|
+
*/
|
|
330
|
+
export function computeCompletion(coverage) {
|
|
331
|
+
const total = Object.keys(coverage).length;
|
|
332
|
+
const covered = Object.values(coverage).filter(Boolean).length;
|
|
333
|
+
return total === 0 ? 0 : Math.round((covered / total) * 100);
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Returns true if the topic is too simple for interview mode.
|
|
337
|
+
* Delegates to isShortTopic from questions.ts.
|
|
338
|
+
*/
|
|
339
|
+
export function shouldSkipInterview(topic) {
|
|
340
|
+
return isShortTopic(topic);
|
|
341
|
+
}
|
|
342
|
+
//# sourceMappingURL=interview-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interview-mode.js","sourceRoot":"","sources":["../../../src/tools/clarify-requirements/interview-mode.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configure-workers-handler.d.ts","sourceRoot":"","sources":["../../src/tools/configure-workers-handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"configure-workers-handler.d.ts","sourceRoot":"","sources":["../../src/tools/configure-workers-handler.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAwB,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAQjG,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,CA2H7F"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
// tools/configure-workers-handler.ts — Handler for configure_workers tool (SPEC-078 AC-12)
|
|
2
|
+
import { readFile, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { join } from 'node:path';
|
|
2
5
|
import { getWorkerEngine } from '../engine/workers/index.js';
|
|
3
6
|
import { updateOverride } from '../storage/worker-store.js';
|
|
4
7
|
// ---------------------------------------------------------------------------
|
|
@@ -102,6 +105,9 @@ export async function handleConfigureWorkers(args) {
|
|
|
102
105
|
description = `Removed pattern "${args.value}" from "${args.workerName}"`;
|
|
103
106
|
break;
|
|
104
107
|
}
|
|
108
|
+
case 'enable-auto-memory': {
|
|
109
|
+
return await handleEnableWorkerAutoMemory(args.workerName, args.projectId);
|
|
110
|
+
}
|
|
105
111
|
}
|
|
106
112
|
// Apply to engine
|
|
107
113
|
engine.applyOverride(args.workerName, override);
|
|
@@ -113,4 +119,79 @@ export async function handleConfigureWorkers(args) {
|
|
|
113
119
|
],
|
|
114
120
|
};
|
|
115
121
|
}
|
|
122
|
+
// ---------------------------------------------------------------------------
|
|
123
|
+
// enable-auto-memory helper
|
|
124
|
+
// ---------------------------------------------------------------------------
|
|
125
|
+
async function handleEnableWorkerAutoMemory(workerName, projectId) {
|
|
126
|
+
// Search for agent file in .claude/agents/
|
|
127
|
+
const agentsDirCandidates = [
|
|
128
|
+
join(process.cwd(), '.claude', 'agents', `${workerName}.md`),
|
|
129
|
+
join(process.cwd(), '.claude', 'agents', `${workerName.toLowerCase()}.md`),
|
|
130
|
+
];
|
|
131
|
+
const agentFile = agentsDirCandidates.find((p) => existsSync(p));
|
|
132
|
+
if (!agentFile) {
|
|
133
|
+
// List available agents for helpful error message
|
|
134
|
+
const agentsDir = join(process.cwd(), '.claude', 'agents');
|
|
135
|
+
let available = '(none found)';
|
|
136
|
+
try {
|
|
137
|
+
const { readdir } = await import('node:fs/promises');
|
|
138
|
+
const entries = await readdir(agentsDir);
|
|
139
|
+
const mdFiles = entries.filter((e) => e.endsWith('.md')).map((e) => e.replace(/\.md$/, ''));
|
|
140
|
+
if (mdFiles.length > 0) {
|
|
141
|
+
available = mdFiles.join(', ');
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
// agentsDir may not exist
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
content: [
|
|
149
|
+
{
|
|
150
|
+
type: 'text',
|
|
151
|
+
text: `Agent file for "${workerName}" not found in .claude/agents/. Available agents: ${available}`,
|
|
152
|
+
},
|
|
153
|
+
],
|
|
154
|
+
isError: true,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
const raw = await readFile(agentFile, 'utf-8');
|
|
158
|
+
// Parse YAML frontmatter manually: split by ---
|
|
159
|
+
const parts = raw.split('---');
|
|
160
|
+
if (parts.length < 3) {
|
|
161
|
+
// No frontmatter block — prepend a minimal one
|
|
162
|
+
const newContent = `---\nautoMemory: true\n---\n${raw}`;
|
|
163
|
+
await writeFile(agentFile, newContent, 'utf-8');
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
const frontmatter = parts[1] ?? '';
|
|
167
|
+
const body = parts.slice(2).join('---');
|
|
168
|
+
// Check if autoMemory already set
|
|
169
|
+
if (/^autoMemory:/m.test(frontmatter)) {
|
|
170
|
+
// Replace existing value
|
|
171
|
+
const updatedFm = frontmatter.replace(/^autoMemory:.*$/m, 'autoMemory: true');
|
|
172
|
+
await writeFile(agentFile, `---${updatedFm}---${body}`, 'utf-8');
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
// Append to frontmatter
|
|
176
|
+
const updatedFm = frontmatter.trimEnd() + '\nautoMemory: true\n';
|
|
177
|
+
await writeFile(agentFile, `---${updatedFm}---${body}`, 'utf-8');
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
const memoryPath = `~/.claude/projects/<project>/memory/agents/${workerName}/`;
|
|
181
|
+
return {
|
|
182
|
+
content: [
|
|
183
|
+
{
|
|
184
|
+
type: 'text',
|
|
185
|
+
text: JSON.stringify({
|
|
186
|
+
action: 'enable-auto-memory',
|
|
187
|
+
workerName,
|
|
188
|
+
projectId,
|
|
189
|
+
agentFile,
|
|
190
|
+
memoryPath,
|
|
191
|
+
message: `Auto-memory enabled for agent "${workerName}". Memory will accumulate at ${memoryPath}`,
|
|
192
|
+
}, null, 2),
|
|
193
|
+
},
|
|
194
|
+
],
|
|
195
|
+
};
|
|
196
|
+
}
|
|
116
197
|
//# sourceMappingURL=configure-workers-handler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configure-workers-handler.js","sourceRoot":"","sources":["../../src/tools/configure-workers-handler.ts"],"names":[],"mappings":"AAAA,2FAA2F;
|
|
1
|
+
{"version":3,"file":"configure-workers-handler.js","sourceRoot":"","sources":["../../src/tools/configure-workers-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import type { ToolResult, FacilitateInput, ParadigmReport } from '../types/index.js';
|
|
2
|
-
/**
|
|
3
|
-
* Builds paradigm expert voice observations from a pre-computed ParadigmReport.
|
|
4
|
-
* Degrades gracefully when no detection data is available.
|
|
5
|
-
*/
|
|
6
2
|
export declare function buildParadigmObservations(paradigmReport: ParadigmReport | null | undefined): string;
|
|
7
|
-
export declare function handleFacilitate(params: FacilitateInput): ToolResult
|
|
3
|
+
export declare function handleFacilitate(params: FacilitateInput): Promise<ToolResult>;
|
|
8
4
|
//# sourceMappingURL=facilitate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"facilitate.d.ts","sourceRoot":"","sources":["../../src/tools/facilitate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,UAAU,EAEV,eAAe,EAGf,cAAc,
|
|
1
|
+
{"version":3,"file":"facilitate.d.ts","sourceRoot":"","sources":["../../src/tools/facilitate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,UAAU,EAEV,eAAe,EAGf,cAAc,EAEf,MAAM,mBAAmB,CAAC;AAwI3B,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAChD,MAAM,CAMR;AA2HD,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CA+JnF"}
|