@thiagodiogo/pastelsdd 1.0.0-beta.1
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/LICENSE +22 -0
- package/README.md +3 -0
- package/bin/pastelsdd.js +5 -0
- package/dist/cli/index.d.ts +5 -0
- package/dist/cli/index.js +526 -0
- package/dist/commands/change.d.ts +35 -0
- package/dist/commands/change.js +277 -0
- package/dist/commands/completion.d.ts +72 -0
- package/dist/commands/completion.js +264 -0
- package/dist/commands/config.d.ts +36 -0
- package/dist/commands/config.js +611 -0
- package/dist/commands/context-store.d.ts +3 -0
- package/dist/commands/context-store.js +282 -0
- package/dist/commands/feedback.d.ts +9 -0
- package/dist/commands/feedback.js +183 -0
- package/dist/commands/initiative.d.ts +13 -0
- package/dist/commands/initiative.js +318 -0
- package/dist/commands/schema.d.ts +6 -0
- package/dist/commands/schema.js +869 -0
- package/dist/commands/show.d.ts +14 -0
- package/dist/commands/show.js +132 -0
- package/dist/commands/spec.d.ts +15 -0
- package/dist/commands/spec.js +225 -0
- package/dist/commands/validate.d.ts +24 -0
- package/dist/commands/validate.js +294 -0
- package/dist/commands/workflow/index.d.ts +19 -0
- package/dist/commands/workflow/index.js +13 -0
- package/dist/commands/workflow/initiative-link.d.ts +24 -0
- package/dist/commands/workflow/initiative-link.js +47 -0
- package/dist/commands/workflow/instructions.d.ts +29 -0
- package/dist/commands/workflow/instructions.js +344 -0
- package/dist/commands/workflow/new-change.d.ts +17 -0
- package/dist/commands/workflow/new-change.js +141 -0
- package/dist/commands/workflow/schemas.d.ts +10 -0
- package/dist/commands/workflow/schemas.js +34 -0
- package/dist/commands/workflow/set-change.d.ts +13 -0
- package/dist/commands/workflow/set-change.js +87 -0
- package/dist/commands/workflow/shared.d.ts +59 -0
- package/dist/commands/workflow/shared.js +116 -0
- package/dist/commands/workflow/status.d.ts +14 -0
- package/dist/commands/workflow/status.js +90 -0
- package/dist/commands/workflow/templates.d.ts +16 -0
- package/dist/commands/workflow/templates.js +69 -0
- package/dist/commands/workspace/context-status.d.ts +4 -0
- package/dist/commands/workspace/context-status.js +59 -0
- package/dist/commands/workspace/open-view.d.ts +62 -0
- package/dist/commands/workspace/open-view.js +228 -0
- package/dist/commands/workspace/open.d.ts +37 -0
- package/dist/commands/workspace/open.js +102 -0
- package/dist/commands/workspace/opener-selection.d.ts +11 -0
- package/dist/commands/workspace/opener-selection.js +93 -0
- package/dist/commands/workspace/operations.d.ts +28 -0
- package/dist/commands/workspace/operations.js +543 -0
- package/dist/commands/workspace/prompt-theme.d.ts +29 -0
- package/dist/commands/workspace/prompt-theme.js +24 -0
- package/dist/commands/workspace/registration.d.ts +13 -0
- package/dist/commands/workspace/registration.js +84 -0
- package/dist/commands/workspace/selection.d.ts +6 -0
- package/dist/commands/workspace/selection.js +122 -0
- package/dist/commands/workspace/types.d.ts +103 -0
- package/dist/commands/workspace/types.js +36 -0
- package/dist/commands/workspace.d.ts +6 -0
- package/dist/commands/workspace.js +678 -0
- package/dist/core/archive.d.ts +11 -0
- package/dist/core/archive.js +318 -0
- package/dist/core/artifact-graph/graph.d.ts +56 -0
- package/dist/core/artifact-graph/graph.js +141 -0
- package/dist/core/artifact-graph/index.d.ts +9 -0
- package/dist/core/artifact-graph/index.js +14 -0
- package/dist/core/artifact-graph/instruction-loader.d.ts +183 -0
- package/dist/core/artifact-graph/instruction-loader.js +256 -0
- package/dist/core/artifact-graph/outputs.d.ts +14 -0
- package/dist/core/artifact-graph/outputs.js +39 -0
- package/dist/core/artifact-graph/resolver.d.ts +81 -0
- package/dist/core/artifact-graph/resolver.js +257 -0
- package/dist/core/artifact-graph/schema.d.ts +13 -0
- package/dist/core/artifact-graph/schema.js +108 -0
- package/dist/core/artifact-graph/state.d.ts +12 -0
- package/dist/core/artifact-graph/state.js +31 -0
- package/dist/core/artifact-graph/types.d.ts +40 -0
- package/dist/core/artifact-graph/types.js +29 -0
- package/dist/core/available-tools.d.ts +17 -0
- package/dist/core/available-tools.js +43 -0
- package/dist/core/change-metadata/index.d.ts +2 -0
- package/dist/core/change-metadata/index.js +2 -0
- package/dist/core/change-metadata/schema.d.ts +18 -0
- package/dist/core/change-metadata/schema.js +28 -0
- package/dist/core/change-status-policy.d.ts +50 -0
- package/dist/core/change-status-policy.js +70 -0
- package/dist/core/collections/index.d.ts +3 -0
- package/dist/core/collections/index.js +3 -0
- package/dist/core/collections/initiatives/collection.d.ts +4 -0
- package/dist/core/collections/initiatives/collection.js +17 -0
- package/dist/core/collections/initiatives/index.d.ts +6 -0
- package/dist/core/collections/initiatives/index.js +6 -0
- package/dist/core/collections/initiatives/operations.d.ts +49 -0
- package/dist/core/collections/initiatives/operations.js +175 -0
- package/dist/core/collections/initiatives/resolution.d.ts +87 -0
- package/dist/core/collections/initiatives/resolution.js +374 -0
- package/dist/core/collections/initiatives/schema.d.ts +41 -0
- package/dist/core/collections/initiatives/schema.js +134 -0
- package/dist/core/collections/initiatives/templates.d.ts +12 -0
- package/dist/core/collections/initiatives/templates.js +90 -0
- package/dist/core/collections/runtime.d.ts +46 -0
- package/dist/core/collections/runtime.js +194 -0
- package/dist/core/command-generation/adapters/amazon-q.d.ts +13 -0
- package/dist/core/command-generation/adapters/amazon-q.js +26 -0
- package/dist/core/command-generation/adapters/antigravity.d.ts +13 -0
- package/dist/core/command-generation/adapters/antigravity.js +26 -0
- package/dist/core/command-generation/adapters/auggie.d.ts +13 -0
- package/dist/core/command-generation/adapters/auggie.js +27 -0
- package/dist/core/command-generation/adapters/bob.d.ts +14 -0
- package/dist/core/command-generation/adapters/bob.js +45 -0
- package/dist/core/command-generation/adapters/claude.d.ts +13 -0
- package/dist/core/command-generation/adapters/claude.js +50 -0
- package/dist/core/command-generation/adapters/cline.d.ts +14 -0
- package/dist/core/command-generation/adapters/cline.js +27 -0
- package/dist/core/command-generation/adapters/codebuddy.d.ts +13 -0
- package/dist/core/command-generation/adapters/codebuddy.js +28 -0
- package/dist/core/command-generation/adapters/codex.d.ts +16 -0
- package/dist/core/command-generation/adapters/codex.js +39 -0
- package/dist/core/command-generation/adapters/continue.d.ts +13 -0
- package/dist/core/command-generation/adapters/continue.js +28 -0
- package/dist/core/command-generation/adapters/costrict.d.ts +13 -0
- package/dist/core/command-generation/adapters/costrict.js +27 -0
- package/dist/core/command-generation/adapters/crush.d.ts +13 -0
- package/dist/core/command-generation/adapters/crush.js +30 -0
- package/dist/core/command-generation/adapters/cursor.d.ts +14 -0
- package/dist/core/command-generation/adapters/cursor.js +44 -0
- package/dist/core/command-generation/adapters/factory.d.ts +13 -0
- package/dist/core/command-generation/adapters/factory.js +27 -0
- package/dist/core/command-generation/adapters/gemini.d.ts +13 -0
- package/dist/core/command-generation/adapters/gemini.js +26 -0
- package/dist/core/command-generation/adapters/github-copilot.d.ts +13 -0
- package/dist/core/command-generation/adapters/github-copilot.js +26 -0
- package/dist/core/command-generation/adapters/iflow.d.ts +13 -0
- package/dist/core/command-generation/adapters/iflow.js +29 -0
- package/dist/core/command-generation/adapters/index.d.ts +32 -0
- package/dist/core/command-generation/adapters/index.js +32 -0
- package/dist/core/command-generation/adapters/junie.d.ts +13 -0
- package/dist/core/command-generation/adapters/junie.js +26 -0
- package/dist/core/command-generation/adapters/kilocode.d.ts +14 -0
- package/dist/core/command-generation/adapters/kilocode.js +23 -0
- package/dist/core/command-generation/adapters/kiro.d.ts +13 -0
- package/dist/core/command-generation/adapters/kiro.js +26 -0
- package/dist/core/command-generation/adapters/lingma.d.ts +13 -0
- package/dist/core/command-generation/adapters/lingma.js +30 -0
- package/dist/core/command-generation/adapters/opencode.d.ts +13 -0
- package/dist/core/command-generation/adapters/opencode.js +29 -0
- package/dist/core/command-generation/adapters/pi.d.ts +18 -0
- package/dist/core/command-generation/adapters/pi.js +55 -0
- package/dist/core/command-generation/adapters/qoder.d.ts +13 -0
- package/dist/core/command-generation/adapters/qoder.js +30 -0
- package/dist/core/command-generation/adapters/qwen.d.ts +13 -0
- package/dist/core/command-generation/adapters/qwen.js +26 -0
- package/dist/core/command-generation/adapters/roocode.d.ts +14 -0
- package/dist/core/command-generation/adapters/roocode.js +27 -0
- package/dist/core/command-generation/adapters/windsurf.d.ts +14 -0
- package/dist/core/command-generation/adapters/windsurf.js +51 -0
- package/dist/core/command-generation/generator.d.ts +21 -0
- package/dist/core/command-generation/generator.js +27 -0
- package/dist/core/command-generation/index.d.ts +22 -0
- package/dist/core/command-generation/index.js +24 -0
- package/dist/core/command-generation/registry.d.ts +36 -0
- package/dist/core/command-generation/registry.js +98 -0
- package/dist/core/command-generation/types.d.ts +56 -0
- package/dist/core/command-generation/types.js +8 -0
- package/dist/core/completions/command-registry.d.ts +3 -0
- package/dist/core/completions/command-registry.js +939 -0
- package/dist/core/completions/completion-provider.d.ts +71 -0
- package/dist/core/completions/completion-provider.js +129 -0
- package/dist/core/completions/factory.d.ts +64 -0
- package/dist/core/completions/factory.js +75 -0
- package/dist/core/completions/generators/bash-generator.d.ts +35 -0
- package/dist/core/completions/generators/bash-generator.js +230 -0
- package/dist/core/completions/generators/fish-generator.d.ts +32 -0
- package/dist/core/completions/generators/fish-generator.js +160 -0
- package/dist/core/completions/generators/powershell-generator.d.ts +36 -0
- package/dist/core/completions/generators/powershell-generator.js +266 -0
- package/dist/core/completions/generators/zsh-generator.d.ts +47 -0
- package/dist/core/completions/generators/zsh-generator.js +274 -0
- package/dist/core/completions/installers/bash-installer.d.ts +87 -0
- package/dist/core/completions/installers/bash-installer.js +318 -0
- package/dist/core/completions/installers/fish-installer.d.ts +43 -0
- package/dist/core/completions/installers/fish-installer.js +143 -0
- package/dist/core/completions/installers/powershell-installer.d.ts +102 -0
- package/dist/core/completions/installers/powershell-installer.js +387 -0
- package/dist/core/completions/installers/zsh-installer.d.ts +117 -0
- package/dist/core/completions/installers/zsh-installer.js +421 -0
- package/dist/core/completions/shared-flags.d.ts +12 -0
- package/dist/core/completions/shared-flags.js +28 -0
- package/dist/core/completions/templates/bash-templates.d.ts +6 -0
- package/dist/core/completions/templates/bash-templates.js +30 -0
- package/dist/core/completions/templates/fish-templates.d.ts +7 -0
- package/dist/core/completions/templates/fish-templates.js +45 -0
- package/dist/core/completions/templates/powershell-templates.d.ts +6 -0
- package/dist/core/completions/templates/powershell-templates.js +34 -0
- package/dist/core/completions/templates/zsh-templates.d.ts +6 -0
- package/dist/core/completions/templates/zsh-templates.js +45 -0
- package/dist/core/completions/types.d.ts +101 -0
- package/dist/core/completions/types.js +2 -0
- package/dist/core/config-prompts.d.ts +9 -0
- package/dist/core/config-prompts.js +34 -0
- package/dist/core/config-schema.d.ts +86 -0
- package/dist/core/config-schema.js +213 -0
- package/dist/core/config.d.ts +18 -0
- package/dist/core/config.js +38 -0
- package/dist/core/context-store/binding.d.ts +53 -0
- package/dist/core/context-store/binding.js +197 -0
- package/dist/core/context-store/errors.d.ts +20 -0
- package/dist/core/context-store/errors.js +22 -0
- package/dist/core/context-store/foundation.d.ts +54 -0
- package/dist/core/context-store/foundation.js +318 -0
- package/dist/core/context-store/index.d.ts +6 -0
- package/dist/core/context-store/index.js +6 -0
- package/dist/core/context-store/operations.d.ts +62 -0
- package/dist/core/context-store/operations.js +352 -0
- package/dist/core/context-store/registry.d.ts +35 -0
- package/dist/core/context-store/registry.js +158 -0
- package/dist/core/converters/json-converter.d.ts +6 -0
- package/dist/core/converters/json-converter.js +51 -0
- package/dist/core/global-config.d.ts +49 -0
- package/dist/core/global-config.js +124 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.js +7 -0
- package/dist/core/init.d.ts +37 -0
- package/dist/core/init.js +593 -0
- package/dist/core/legacy-cleanup.d.ts +162 -0
- package/dist/core/legacy-cleanup.js +514 -0
- package/dist/core/list.d.ts +9 -0
- package/dist/core/list.js +171 -0
- package/dist/core/migration.d.ts +23 -0
- package/dist/core/migration.js +108 -0
- package/dist/core/parsers/change-parser.d.ts +13 -0
- package/dist/core/parsers/change-parser.js +197 -0
- package/dist/core/parsers/markdown-parser.d.ts +26 -0
- package/dist/core/parsers/markdown-parser.js +227 -0
- package/dist/core/parsers/requirement-blocks.d.ts +37 -0
- package/dist/core/parsers/requirement-blocks.js +201 -0
- package/dist/core/parsers/spec-structure.d.ts +9 -0
- package/dist/core/parsers/spec-structure.js +88 -0
- package/dist/core/planning-home.d.ts +21 -0
- package/dist/core/planning-home.js +108 -0
- package/dist/core/profile-sync-drift.d.ts +38 -0
- package/dist/core/profile-sync-drift.js +200 -0
- package/dist/core/profiles.d.ts +26 -0
- package/dist/core/profiles.js +40 -0
- package/dist/core/project-config.d.ts +64 -0
- package/dist/core/project-config.js +223 -0
- package/dist/core/schemas/base.schema.d.ts +13 -0
- package/dist/core/schemas/base.schema.js +13 -0
- package/dist/core/schemas/change.schema.d.ts +73 -0
- package/dist/core/schemas/change.schema.js +31 -0
- package/dist/core/schemas/index.d.ts +4 -0
- package/dist/core/schemas/index.js +4 -0
- package/dist/core/schemas/spec.schema.d.ts +18 -0
- package/dist/core/schemas/spec.schema.js +15 -0
- package/dist/core/shared/index.d.ts +8 -0
- package/dist/core/shared/index.js +8 -0
- package/dist/core/shared/skill-generation.d.ts +49 -0
- package/dist/core/shared/skill-generation.js +96 -0
- package/dist/core/shared/tool-detection.d.ts +71 -0
- package/dist/core/shared/tool-detection.js +158 -0
- package/dist/core/specs-apply.d.ts +73 -0
- package/dist/core/specs-apply.js +392 -0
- package/dist/core/styles/palette.d.ts +7 -0
- package/dist/core/styles/palette.js +8 -0
- package/dist/core/templates/index.d.ts +8 -0
- package/dist/core/templates/index.js +9 -0
- package/dist/core/templates/skill-templates.d.ts +19 -0
- package/dist/core/templates/skill-templates.js +18 -0
- package/dist/core/templates/types.d.ts +19 -0
- package/dist/core/templates/types.js +5 -0
- package/dist/core/templates/workflows/apply-change.d.ts +10 -0
- package/dist/core/templates/workflows/apply-change.js +314 -0
- package/dist/core/templates/workflows/archive-change.d.ts +10 -0
- package/dist/core/templates/workflows/archive-change.js +277 -0
- package/dist/core/templates/workflows/bulk-archive-change.d.ts +10 -0
- package/dist/core/templates/workflows/bulk-archive-change.js +492 -0
- package/dist/core/templates/workflows/continue-change.d.ts +10 -0
- package/dist/core/templates/workflows/continue-change.js +234 -0
- package/dist/core/templates/workflows/explore.d.ts +10 -0
- package/dist/core/templates/workflows/explore.js +459 -0
- package/dist/core/templates/workflows/feedback.d.ts +9 -0
- package/dist/core/templates/workflows/feedback.js +108 -0
- package/dist/core/templates/workflows/ff-change.d.ts +10 -0
- package/dist/core/templates/workflows/ff-change.js +200 -0
- package/dist/core/templates/workflows/new-change.d.ts +10 -0
- package/dist/core/templates/workflows/new-change.js +143 -0
- package/dist/core/templates/workflows/onboard.d.ts +10 -0
- package/dist/core/templates/workflows/onboard.js +563 -0
- package/dist/core/templates/workflows/propose.d.ts +10 -0
- package/dist/core/templates/workflows/propose.js +218 -0
- package/dist/core/templates/workflows/sync-specs.d.ts +10 -0
- package/dist/core/templates/workflows/sync-specs.js +290 -0
- package/dist/core/templates/workflows/verify-change.d.ts +10 -0
- package/dist/core/templates/workflows/verify-change.js +338 -0
- package/dist/core/update.d.ts +82 -0
- package/dist/core/update.js +557 -0
- package/dist/core/validation/constants.d.ts +34 -0
- package/dist/core/validation/constants.js +40 -0
- package/dist/core/validation/types.d.ts +18 -0
- package/dist/core/validation/types.js +2 -0
- package/dist/core/validation/validator.d.ts +33 -0
- package/dist/core/validation/validator.js +418 -0
- package/dist/core/view.d.ts +8 -0
- package/dist/core/view.js +168 -0
- package/dist/core/workspace/foundation.d.ts +62 -0
- package/dist/core/workspace/foundation.js +274 -0
- package/dist/core/workspace/index.d.ts +8 -0
- package/dist/core/workspace/index.js +8 -0
- package/dist/core/workspace/legacy-state.d.ts +28 -0
- package/dist/core/workspace/legacy-state.js +200 -0
- package/dist/core/workspace/link-input.d.ts +9 -0
- package/dist/core/workspace/link-input.js +32 -0
- package/dist/core/workspace/open-surface.d.ts +43 -0
- package/dist/core/workspace/open-surface.js +214 -0
- package/dist/core/workspace/openers.d.ts +21 -0
- package/dist/core/workspace/openers.js +119 -0
- package/dist/core/workspace/registry.d.ts +24 -0
- package/dist/core/workspace/registry.js +146 -0
- package/dist/core/workspace/skills.d.ts +57 -0
- package/dist/core/workspace/skills.js +334 -0
- package/dist/core/workspace/state-io.d.ts +10 -0
- package/dist/core/workspace/state-io.js +119 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/prompts/searchable-multi-select.d.ts +28 -0
- package/dist/prompts/searchable-multi-select.js +159 -0
- package/dist/telemetry/config.d.ts +38 -0
- package/dist/telemetry/config.js +136 -0
- package/dist/telemetry/index.d.ts +31 -0
- package/dist/telemetry/index.js +164 -0
- package/dist/ui/ascii-patterns.d.ts +16 -0
- package/dist/ui/ascii-patterns.js +133 -0
- package/dist/ui/welcome-screen.d.ts +10 -0
- package/dist/ui/welcome-screen.js +146 -0
- package/dist/utils/change-metadata.d.ts +54 -0
- package/dist/utils/change-metadata.js +141 -0
- package/dist/utils/change-utils.d.ts +71 -0
- package/dist/utils/change-utils.js +123 -0
- package/dist/utils/command-references.d.ts +18 -0
- package/dist/utils/command-references.js +20 -0
- package/dist/utils/file-system.d.ts +41 -0
- package/dist/utils/file-system.js +301 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/interactive.d.ts +18 -0
- package/dist/utils/interactive.js +21 -0
- package/dist/utils/item-discovery.d.ts +4 -0
- package/dist/utils/item-discovery.js +72 -0
- package/dist/utils/match.d.ts +3 -0
- package/dist/utils/match.js +22 -0
- package/dist/utils/shell-detection.d.ts +20 -0
- package/dist/utils/shell-detection.js +41 -0
- package/dist/utils/task-progress.d.ts +8 -0
- package/dist/utils/task-progress.js +36 -0
- package/package.json +84 -0
- package/schemas/spec-driven/schema.yaml +153 -0
- package/schemas/spec-driven/templates/design.md +19 -0
- package/schemas/spec-driven/templates/proposal.md +23 -0
- package/schemas/spec-driven/templates/spec.md +8 -0
- package/schemas/spec-driven/templates/tasks.md +9 -0
- package/schemas/workspace-planning/schema.yaml +72 -0
- package/schemas/workspace-planning/templates/design.md +33 -0
- package/schemas/workspace-planning/templates/proposal.md +28 -0
- package/schemas/workspace-planning/templates/spec.md +9 -0
- package/schemas/workspace-planning/templates/tasks.md +15 -0
- package/scripts/postinstall.js +83 -0
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import { ContextStoreError, doctorContextStores, listContextStores, prepareContextStoreSetup, registerExistingContextStore, setupPreparedContextStore, } from '../core/context-store/index.js';
|
|
2
|
+
import { isInteractive } from '../utils/interactive.js';
|
|
3
|
+
function printJson(payload) {
|
|
4
|
+
console.log(JSON.stringify(payload, null, 2));
|
|
5
|
+
}
|
|
6
|
+
function asErrorMessage(error) {
|
|
7
|
+
return error instanceof Error ? error.message : String(error);
|
|
8
|
+
}
|
|
9
|
+
function appendStatus(payload, status) {
|
|
10
|
+
return {
|
|
11
|
+
...payload,
|
|
12
|
+
status: [...payload.status, status],
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function toStoreOutput(store) {
|
|
16
|
+
return {
|
|
17
|
+
id: store.id,
|
|
18
|
+
root: store.root,
|
|
19
|
+
...(store.metadataPath ? { metadata_path: store.metadataPath } : {}),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function toMutationOutput(result) {
|
|
23
|
+
return {
|
|
24
|
+
context_store: toStoreOutput(result.store),
|
|
25
|
+
registry: {
|
|
26
|
+
path: result.registryCommit.path,
|
|
27
|
+
registered: true,
|
|
28
|
+
},
|
|
29
|
+
git: {
|
|
30
|
+
is_repository: result.git.isRepository,
|
|
31
|
+
initialized: result.git.initialized,
|
|
32
|
+
},
|
|
33
|
+
created_files: result.createdArtifacts,
|
|
34
|
+
status: [],
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function toListOutput(result) {
|
|
38
|
+
return {
|
|
39
|
+
context_stores: result.stores.map(toStoreOutput),
|
|
40
|
+
status: [],
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function toDoctorStoreOutput(store) {
|
|
44
|
+
return {
|
|
45
|
+
...toStoreOutput(store),
|
|
46
|
+
metadata: store.metadata,
|
|
47
|
+
git: {
|
|
48
|
+
is_repository: store.git.isRepository,
|
|
49
|
+
},
|
|
50
|
+
status: store.diagnostics,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function toDoctorOutput(result) {
|
|
54
|
+
return {
|
|
55
|
+
context_stores: result.stores.map(toDoctorStoreOutput),
|
|
56
|
+
status: result.diagnostics,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function asStatus(error) {
|
|
60
|
+
if (error instanceof ContextStoreError) {
|
|
61
|
+
return error.diagnostic;
|
|
62
|
+
}
|
|
63
|
+
const message = asErrorMessage(error);
|
|
64
|
+
return {
|
|
65
|
+
severity: 'error',
|
|
66
|
+
code: 'context_store_error',
|
|
67
|
+
message,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function isPromptCancellationError(error) {
|
|
71
|
+
return (error instanceof Error &&
|
|
72
|
+
(error.name === 'ExitPromptError' || error.message.includes('force closed the prompt with SIGINT')));
|
|
73
|
+
}
|
|
74
|
+
async function shouldInitializeGit(options) {
|
|
75
|
+
if (options.initGit !== undefined) {
|
|
76
|
+
return options.initGit;
|
|
77
|
+
}
|
|
78
|
+
if (options.json || !isInteractive()) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
const { confirm } = await import('@inquirer/prompts');
|
|
82
|
+
return confirm({
|
|
83
|
+
message: 'Initialize Git repository?',
|
|
84
|
+
default: true,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
function formatGitHuman(git) {
|
|
88
|
+
if (!git)
|
|
89
|
+
return 'unknown';
|
|
90
|
+
if (git.initialized)
|
|
91
|
+
return 'initialized';
|
|
92
|
+
return git.is_repository ? 'repository detected' : 'not initialized';
|
|
93
|
+
}
|
|
94
|
+
function printMutationHuman(title, payload) {
|
|
95
|
+
if (!payload.context_store || !payload.registry || !payload.git) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
console.log(title);
|
|
99
|
+
console.log('');
|
|
100
|
+
console.log(`ID: ${payload.context_store.id}`);
|
|
101
|
+
console.log(`Location: ${payload.context_store.root}`);
|
|
102
|
+
console.log(`Metadata: ${payload.context_store.metadata_path}`);
|
|
103
|
+
console.log(`Registry: ${payload.registry.path}`);
|
|
104
|
+
console.log(`Git: ${formatGitHuman(payload.git)}`);
|
|
105
|
+
}
|
|
106
|
+
function printListHuman(payload) {
|
|
107
|
+
if (payload.context_stores.length === 0) {
|
|
108
|
+
console.log('No context stores registered.');
|
|
109
|
+
console.log('');
|
|
110
|
+
console.log('Next:');
|
|
111
|
+
console.log(' pastelsdd context-store setup team-context');
|
|
112
|
+
console.log(' pastelsdd context-store register /path/to/context-store');
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
console.log(`Pastelsdd context stores (${payload.context_stores.length})`);
|
|
116
|
+
console.log('');
|
|
117
|
+
console.log(`${'ID'.padEnd(16)}Location`);
|
|
118
|
+
for (const store of payload.context_stores) {
|
|
119
|
+
console.log(`${store.id.padEnd(16)}${store.root}`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function formatMetadataHuman(store) {
|
|
123
|
+
if (store.metadata.valid)
|
|
124
|
+
return 'ok';
|
|
125
|
+
if (store.metadata.present === false)
|
|
126
|
+
return 'missing';
|
|
127
|
+
if (store.metadata.present === null)
|
|
128
|
+
return 'unknown';
|
|
129
|
+
return 'invalid';
|
|
130
|
+
}
|
|
131
|
+
function formatDoctorGitHuman(store) {
|
|
132
|
+
if (store.git.is_repository === null)
|
|
133
|
+
return 'unknown';
|
|
134
|
+
return store.git.is_repository ? 'repository detected' : 'not detected';
|
|
135
|
+
}
|
|
136
|
+
function printDoctorHuman(payload) {
|
|
137
|
+
if (payload.context_stores.length === 0) {
|
|
138
|
+
console.log('No context stores registered.');
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
console.log('Context store doctor');
|
|
142
|
+
for (const store of payload.context_stores) {
|
|
143
|
+
console.log('');
|
|
144
|
+
console.log(store.id);
|
|
145
|
+
console.log(` Location: ${store.root}`);
|
|
146
|
+
console.log(` Metadata: ${formatMetadataHuman(store)}`);
|
|
147
|
+
console.log(` Git: ${formatDoctorGitHuman(store)}`);
|
|
148
|
+
if (store.status.length === 0) {
|
|
149
|
+
console.log(' Issues: none');
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
console.log(' Issues:');
|
|
153
|
+
for (const status of store.status) {
|
|
154
|
+
console.log(` - ${status.message}`);
|
|
155
|
+
if (status.fix) {
|
|
156
|
+
console.log(` Fix: ${status.fix}`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
class ContextStoreCommand {
|
|
162
|
+
async setup(id, options = {}) {
|
|
163
|
+
try {
|
|
164
|
+
const prepared = await prepareContextStoreSetup({
|
|
165
|
+
id,
|
|
166
|
+
path: options.path,
|
|
167
|
+
});
|
|
168
|
+
const initGit = await shouldInitializeGit(options);
|
|
169
|
+
const payload = toMutationOutput(await setupPreparedContextStore(prepared, {
|
|
170
|
+
initGit,
|
|
171
|
+
}));
|
|
172
|
+
if (options.json) {
|
|
173
|
+
printJson(payload);
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
printMutationHuman('Context store setup complete', payload);
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
this.handleFailure(options.json, { context_store: null, registry: null, git: null, created_files: [], status: [] }, error);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
async register(inputPath, options = {}) {
|
|
183
|
+
try {
|
|
184
|
+
const payload = toMutationOutput(await registerExistingContextStore({
|
|
185
|
+
path: inputPath,
|
|
186
|
+
id: options.id,
|
|
187
|
+
}));
|
|
188
|
+
if (options.json) {
|
|
189
|
+
printJson(payload);
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
printMutationHuman('Context store registered', payload);
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
this.handleFailure(options.json, { context_store: null, registry: null, git: null, created_files: [], status: [] }, error);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
async list(options = {}) {
|
|
199
|
+
try {
|
|
200
|
+
const payload = toListOutput(await listContextStores());
|
|
201
|
+
if (options.json) {
|
|
202
|
+
printJson(payload);
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
printListHuman(payload);
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
this.handleFailure(options.json, { context_stores: [], status: [] }, error);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
async doctor(id, options = {}) {
|
|
212
|
+
try {
|
|
213
|
+
const payload = toDoctorOutput(await doctorContextStores(id));
|
|
214
|
+
if (options.json) {
|
|
215
|
+
printJson(payload);
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
printDoctorHuman(payload);
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
this.handleFailure(options.json, { context_stores: [], status: [] }, error);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
handleFailure(json, payload, error) {
|
|
225
|
+
if (!json && isPromptCancellationError(error)) {
|
|
226
|
+
console.error('Cancelled.');
|
|
227
|
+
process.exitCode = 130;
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
const status = asStatus(error);
|
|
231
|
+
if (json) {
|
|
232
|
+
printJson(appendStatus(payload, status));
|
|
233
|
+
process.exitCode = 1;
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
console.error(`Error: ${status.message}`);
|
|
237
|
+
if (status.fix) {
|
|
238
|
+
console.error(`Fix: ${status.fix}`);
|
|
239
|
+
}
|
|
240
|
+
process.exitCode = 1;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
export function registerContextStoreCommand(program) {
|
|
244
|
+
const contextStoreCommand = new ContextStoreCommand();
|
|
245
|
+
const contextStore = program
|
|
246
|
+
.command('context-store')
|
|
247
|
+
.description('Set up and inspect local context stores');
|
|
248
|
+
contextStore
|
|
249
|
+
.command('setup [id]')
|
|
250
|
+
.description('Create and register a local context store')
|
|
251
|
+
.option('--path <path>', 'Context store folder path; defaults to ./<id>')
|
|
252
|
+
.option('--init-git', 'Initialize a Git repository in the context store')
|
|
253
|
+
.option('--no-init-git', 'Do not initialize a Git repository')
|
|
254
|
+
.option('--json', 'Output as JSON')
|
|
255
|
+
.action(async (id, options) => {
|
|
256
|
+
await contextStoreCommand.setup(id, options);
|
|
257
|
+
});
|
|
258
|
+
contextStore
|
|
259
|
+
.command('register [path]')
|
|
260
|
+
.description('Register an existing local context store')
|
|
261
|
+
.option('--id <id>', 'Context store id; defaults to metadata or folder name')
|
|
262
|
+
.option('--json', 'Output as JSON')
|
|
263
|
+
.action(async (inputPath, options) => {
|
|
264
|
+
await contextStoreCommand.register(inputPath, options);
|
|
265
|
+
});
|
|
266
|
+
contextStore
|
|
267
|
+
.command('list')
|
|
268
|
+
.alias('ls')
|
|
269
|
+
.description('List locally registered context stores')
|
|
270
|
+
.option('--json', 'Output as JSON')
|
|
271
|
+
.action(async (options) => {
|
|
272
|
+
await contextStoreCommand.list(options);
|
|
273
|
+
});
|
|
274
|
+
contextStore
|
|
275
|
+
.command('doctor [id]')
|
|
276
|
+
.description('Check local context-store registration and metadata')
|
|
277
|
+
.option('--json', 'Output as JSON')
|
|
278
|
+
.action(async (id, options) => {
|
|
279
|
+
await contextStoreCommand.doctor(id, options);
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
//# sourceMappingURL=context-store.js.map
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { execSync, execFileSync } from 'child_process';
|
|
2
|
+
import { createRequire } from 'module';
|
|
3
|
+
import os from 'os';
|
|
4
|
+
const require = createRequire(import.meta.url);
|
|
5
|
+
/**
|
|
6
|
+
* Check if gh CLI is installed and available in PATH
|
|
7
|
+
* Uses platform-appropriate command: 'where' on Windows, 'which' on Unix/macOS
|
|
8
|
+
*/
|
|
9
|
+
function isGhInstalled() {
|
|
10
|
+
try {
|
|
11
|
+
const command = process.platform === 'win32' ? 'where gh' : 'which gh';
|
|
12
|
+
execSync(command, { stdio: 'pipe' });
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Check if gh CLI is authenticated
|
|
21
|
+
*/
|
|
22
|
+
function isGhAuthenticated() {
|
|
23
|
+
try {
|
|
24
|
+
execSync('gh auth status', { stdio: 'pipe' });
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get Pastelsdd version from package.json
|
|
33
|
+
*/
|
|
34
|
+
function getVersion() {
|
|
35
|
+
try {
|
|
36
|
+
const { version } = require('../../package.json');
|
|
37
|
+
return version;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return 'unknown';
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get platform name
|
|
45
|
+
*/
|
|
46
|
+
function getPlatform() {
|
|
47
|
+
return os.platform();
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get current timestamp in ISO format
|
|
51
|
+
*/
|
|
52
|
+
function getTimestamp() {
|
|
53
|
+
return new Date().toISOString();
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Generate metadata footer for feedback
|
|
57
|
+
*/
|
|
58
|
+
function generateMetadata() {
|
|
59
|
+
const version = getVersion();
|
|
60
|
+
const platform = getPlatform();
|
|
61
|
+
const timestamp = getTimestamp();
|
|
62
|
+
return `---
|
|
63
|
+
Submitted via Pastelsdd CLI
|
|
64
|
+
- Version: ${version}
|
|
65
|
+
- Platform: ${platform}
|
|
66
|
+
- Timestamp: ${timestamp}`;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Format the feedback title
|
|
70
|
+
*/
|
|
71
|
+
function formatTitle(message) {
|
|
72
|
+
return `Feedback: ${message}`;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Format the full feedback body
|
|
76
|
+
*/
|
|
77
|
+
function formatBody(bodyText) {
|
|
78
|
+
const parts = [];
|
|
79
|
+
if (bodyText) {
|
|
80
|
+
parts.push(bodyText);
|
|
81
|
+
parts.push(''); // Empty line before metadata
|
|
82
|
+
}
|
|
83
|
+
parts.push(generateMetadata());
|
|
84
|
+
return parts.join('\n');
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Generate a pre-filled GitHub issue URL for manual submission
|
|
88
|
+
*/
|
|
89
|
+
function generateManualSubmissionUrl(title, body) {
|
|
90
|
+
const repo = 'thiagodiogo/Pastelsdd';
|
|
91
|
+
const encodedTitle = encodeURIComponent(title);
|
|
92
|
+
const encodedBody = encodeURIComponent(body);
|
|
93
|
+
const encodedLabels = encodeURIComponent('feedback');
|
|
94
|
+
return `https://github.com/${repo}/issues/new?title=${encodedTitle}&body=${encodedBody}&labels=${encodedLabels}`;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Display formatted feedback content for manual submission
|
|
98
|
+
*/
|
|
99
|
+
function displayFormattedFeedback(title, body) {
|
|
100
|
+
console.log('\n--- FORMATTED FEEDBACK ---');
|
|
101
|
+
console.log(`Title: ${title}`);
|
|
102
|
+
console.log(`Labels: feedback`);
|
|
103
|
+
console.log('\nBody:');
|
|
104
|
+
console.log(body);
|
|
105
|
+
console.log('--- END FEEDBACK ---\n');
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Submit feedback via gh CLI
|
|
109
|
+
* Uses execFileSync to prevent shell injection vulnerabilities
|
|
110
|
+
*/
|
|
111
|
+
function submitViaGhCli(title, body) {
|
|
112
|
+
try {
|
|
113
|
+
const result = execFileSync('gh', [
|
|
114
|
+
'issue',
|
|
115
|
+
'create',
|
|
116
|
+
'--repo',
|
|
117
|
+
'thiagodiogo/Pastelsdd',
|
|
118
|
+
'--title',
|
|
119
|
+
title,
|
|
120
|
+
'--body',
|
|
121
|
+
body,
|
|
122
|
+
'--label',
|
|
123
|
+
'feedback',
|
|
124
|
+
], { encoding: 'utf-8', stdio: 'pipe' });
|
|
125
|
+
const issueUrl = result.trim();
|
|
126
|
+
console.log(`\n✓ Feedback submitted successfully!`);
|
|
127
|
+
console.log(`Issue URL: ${issueUrl}\n`);
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
// Display the error output from gh CLI
|
|
131
|
+
if (error.stderr) {
|
|
132
|
+
console.error(error.stderr.toString());
|
|
133
|
+
}
|
|
134
|
+
else if (error.message) {
|
|
135
|
+
console.error(error.message);
|
|
136
|
+
}
|
|
137
|
+
// Exit with the same code as gh CLI
|
|
138
|
+
process.exit(error.status ?? 1);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Handle fallback when gh CLI is not available or not authenticated
|
|
143
|
+
*/
|
|
144
|
+
function handleFallback(title, body, reason) {
|
|
145
|
+
if (reason === 'missing') {
|
|
146
|
+
console.log('⚠️ GitHub CLI not found. Manual submission required.');
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
console.log('⚠️ GitHub authentication required. Manual submission required.');
|
|
150
|
+
}
|
|
151
|
+
displayFormattedFeedback(title, body);
|
|
152
|
+
const manualUrl = generateManualSubmissionUrl(title, body);
|
|
153
|
+
console.log('Please submit your feedback manually:');
|
|
154
|
+
console.log(manualUrl);
|
|
155
|
+
if (reason === 'unauthenticated') {
|
|
156
|
+
console.log('\nTo auto-submit in the future: gh auth login');
|
|
157
|
+
}
|
|
158
|
+
// Exit with success code (fallback is successful)
|
|
159
|
+
process.exit(0);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Feedback command implementation
|
|
163
|
+
*/
|
|
164
|
+
export class FeedbackCommand {
|
|
165
|
+
async execute(message, options) {
|
|
166
|
+
// Format title and body once for all code paths
|
|
167
|
+
const title = formatTitle(message);
|
|
168
|
+
const body = formatBody(options?.body);
|
|
169
|
+
// Check if gh CLI is installed
|
|
170
|
+
if (!isGhInstalled()) {
|
|
171
|
+
handleFallback(title, body, 'missing');
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
// Check if gh CLI is authenticated
|
|
175
|
+
if (!isGhAuthenticated()) {
|
|
176
|
+
handleFallback(title, body, 'unauthenticated');
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
// Submit via gh CLI
|
|
180
|
+
submitViaGhCli(title, body);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=feedback.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { type InitiativeResolutionDetails, type InitiativeDiagnostic } from '../core/collections/initiatives/index.js';
|
|
3
|
+
export declare class InitiativeCliError extends Error {
|
|
4
|
+
readonly diagnostic: InitiativeDiagnostic;
|
|
5
|
+
constructor(message: string, code: string, options?: {
|
|
6
|
+
target?: string;
|
|
7
|
+
fix?: string;
|
|
8
|
+
details?: InitiativeResolutionDetails;
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
export declare function initiativeDiagnosticFromError(error: unknown): InitiativeDiagnostic;
|
|
12
|
+
export declare function registerInitiativeCommand(program: Command): void;
|
|
13
|
+
//# sourceMappingURL=initiative.d.ts.map
|