prjct-cli 1.22.0 → 1.23.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/CHANGELOG.md +147 -0
- package/bin/prjct +30 -13
- package/dist/bin/prjct.mjs +917 -35845
- package/dist/bin/prjct.mjs.map +7 -0
- package/dist/cli/linear.mjs +16 -0
- package/dist/cli/linear.mjs.map +7 -0
- package/dist/templates.json +1 -0
- package/package.json +4 -5
- package/bin/prjct.ts +0 -342
- package/core/__tests__/agentic/analysis-injection.test.ts +0 -377
- package/core/__tests__/agentic/cache-eviction.test.ts +0 -294
- package/core/__tests__/agentic/command-context.test.ts +0 -281
- package/core/__tests__/agentic/command-executor.test.ts +0 -659
- package/core/__tests__/agentic/domain-classifier.test.ts +0 -330
- package/core/__tests__/agentic/injection-validator.test.ts +0 -255
- package/core/__tests__/agentic/memory-system.test.ts +0 -281
- package/core/__tests__/agentic/plan-mode.test.ts +0 -386
- package/core/__tests__/agentic/prompt-assembly.test.ts +0 -298
- package/core/__tests__/agentic/prompt-builder.test.ts +0 -243
- package/core/__tests__/agentic/response-validator.test.ts +0 -263
- package/core/__tests__/agentic/semantic-matching.test.ts +0 -131
- package/core/__tests__/agentic/smart-context.test.ts +0 -372
- package/core/__tests__/agentic/tech-normalizer.test.ts +0 -136
- package/core/__tests__/agentic/token-budget.test.ts +0 -294
- package/core/__tests__/ai-tools/formatters.test.ts +0 -476
- package/core/__tests__/domain/bm25.test.ts +0 -225
- package/core/__tests__/domain/change-propagator.test.ts +0 -100
- package/core/__tests__/domain/fibonacci.test.ts +0 -113
- package/core/__tests__/domain/file-hasher.test.ts +0 -146
- package/core/__tests__/domain/file-ranker.test.ts +0 -169
- package/core/__tests__/domain/git-cochange.test.ts +0 -121
- package/core/__tests__/domain/import-graph.test.ts +0 -156
- package/core/__tests__/domain/velocity.test.ts +0 -623
- package/core/__tests__/infrastructure/performance-tracker.test.ts +0 -328
- package/core/__tests__/schemas/model.test.ts +0 -272
- package/core/__tests__/services/dependency-validator.test.ts +0 -175
- package/core/__tests__/services/hierarchical-agent-resolver.test.ts +0 -359
- package/core/__tests__/services/nested-context-resolver.test.ts +0 -443
- package/core/__tests__/services/project-index.test.ts +0 -355
- package/core/__tests__/services/staleness-checker.test.ts +0 -204
- package/core/__tests__/storage/analysis-storage.test.ts +0 -641
- package/core/__tests__/storage/archive-storage.test.ts +0 -455
- package/core/__tests__/storage/safe-reader.test.ts +0 -262
- package/core/__tests__/storage/sqlite-migration.test.ts +0 -1016
- package/core/__tests__/storage/state-storage-feedback.test.ts +0 -463
- package/core/__tests__/storage/state-storage-history.test.ts +0 -469
- package/core/__tests__/storage/storage-manager.test.ts +0 -383
- package/core/__tests__/storage/subtask-handoff.test.ts +0 -237
- package/core/__tests__/types/fs.test.ts +0 -125
- package/core/__tests__/utils/date-helper.test.ts +0 -449
- package/core/__tests__/utils/output.test.ts +0 -278
- package/core/__tests__/utils/preserve-sections.test.ts +0 -216
- package/core/__tests__/utils/project-commands.test.ts +0 -71
- package/core/__tests__/utils/retry.test.ts +0 -381
- package/core/__tests__/workflow/state-machine.test.ts +0 -216
- package/core/agentic/agent-router.ts +0 -150
- package/core/agentic/anti-hallucination.ts +0 -141
- package/core/agentic/chain-of-thought.ts +0 -234
- package/core/agentic/command-classifier.ts +0 -141
- package/core/agentic/command-context.ts +0 -168
- package/core/agentic/command-executor.ts +0 -471
- package/core/agentic/context-builder.ts +0 -285
- package/core/agentic/domain-classifier.ts +0 -525
- package/core/agentic/environment-block.ts +0 -102
- package/core/agentic/ground-truth.ts +0 -706
- package/core/agentic/index.ts +0 -193
- package/core/agentic/injection-validator.ts +0 -208
- package/core/agentic/loop-detector.ts +0 -451
- package/core/agentic/memory-system.ts +0 -1547
- package/core/agentic/orchestrator-executor.ts +0 -579
- package/core/agentic/plan-mode.ts +0 -525
- package/core/agentic/prompt-builder.ts +0 -1069
- package/core/agentic/response-validator.ts +0 -98
- package/core/agentic/services.ts +0 -167
- package/core/agentic/skill-loader.ts +0 -106
- package/core/agentic/smart-context.ts +0 -393
- package/core/agentic/tech-normalizer.ts +0 -167
- package/core/agentic/template-executor.ts +0 -272
- package/core/agentic/template-loader.ts +0 -109
- package/core/agentic/token-budget.ts +0 -226
- package/core/agentic/tool-registry.ts +0 -146
- package/core/agents/index.ts +0 -28
- package/core/agents/performance.ts +0 -429
- package/core/ai-tools/formatters.ts +0 -341
- package/core/ai-tools/generator.ts +0 -144
- package/core/ai-tools/index.ts +0 -15
- package/core/ai-tools/registry.ts +0 -201
- package/core/bus/bus.ts +0 -314
- package/core/bus/index.ts +0 -8
- package/core/cli/linear.ts +0 -500
- package/core/cli/lint-meta-commentary.ts +0 -177
- package/core/cli/start.ts +0 -386
- package/core/commands/analysis.ts +0 -1274
- package/core/commands/analytics.ts +0 -342
- package/core/commands/base.ts +0 -118
- package/core/commands/cleanup.ts +0 -157
- package/core/commands/command-data.ts +0 -463
- package/core/commands/commands.ts +0 -306
- package/core/commands/context.ts +0 -238
- package/core/commands/design.ts +0 -77
- package/core/commands/index.ts +0 -19
- package/core/commands/maintenance.ts +0 -77
- package/core/commands/performance.ts +0 -114
- package/core/commands/planning.ts +0 -662
- package/core/commands/register.ts +0 -127
- package/core/commands/registry.ts +0 -444
- package/core/commands/setup.ts +0 -280
- package/core/commands/shipping.ts +0 -267
- package/core/commands/snapshots.ts +0 -297
- package/core/commands/uninstall.ts +0 -542
- package/core/commands/velocity.ts +0 -149
- package/core/commands/workflow.ts +0 -505
- package/core/config/command-context.config.json +0 -66
- package/core/constants/index.ts +0 -379
- package/core/context/generator.ts +0 -368
- package/core/context-tools/files-tool.ts +0 -577
- package/core/context-tools/imports-tool.ts +0 -400
- package/core/context-tools/index.ts +0 -434
- package/core/context-tools/recent-tool.ts +0 -301
- package/core/context-tools/signatures-tool.ts +0 -495
- package/core/context-tools/summary-tool.ts +0 -301
- package/core/context-tools/token-counter.ts +0 -273
- package/core/context-tools/types.ts +0 -253
- package/core/domain/agent-generator.ts +0 -186
- package/core/domain/agent-loader.ts +0 -419
- package/core/domain/analyzer.ts +0 -387
- package/core/domain/architecture-generator.ts +0 -108
- package/core/domain/bm25.ts +0 -525
- package/core/domain/change-propagator.ts +0 -162
- package/core/domain/context-estimator.ts +0 -175
- package/core/domain/fibonacci.ts +0 -128
- package/core/domain/file-hasher.ts +0 -296
- package/core/domain/file-ranker.ts +0 -151
- package/core/domain/git-cochange.ts +0 -250
- package/core/domain/import-graph.ts +0 -315
- package/core/domain/snapshot-manager.ts +0 -415
- package/core/domain/task-stack.ts +0 -578
- package/core/domain/velocity.ts +0 -470
- package/core/errors.ts +0 -335
- package/core/events/events.ts +0 -85
- package/core/events/index.ts +0 -8
- package/core/index.ts +0 -481
- package/core/infrastructure/agent-detector.ts +0 -135
- package/core/infrastructure/ai-provider.ts +0 -578
- package/core/infrastructure/author-detector.ts +0 -133
- package/core/infrastructure/capability-installer.ts +0 -76
- package/core/infrastructure/claude-agent.ts +0 -297
- package/core/infrastructure/command-installer.ts +0 -752
- package/core/infrastructure/config-manager.ts +0 -364
- package/core/infrastructure/editors-config.ts +0 -172
- package/core/infrastructure/path-manager.ts +0 -571
- package/core/infrastructure/performance-tracker.ts +0 -326
- package/core/infrastructure/permission-manager.ts +0 -289
- package/core/infrastructure/setup.ts +0 -1061
- package/core/infrastructure/update-checker.ts +0 -246
- package/core/integrations/issue-tracker/enricher.ts +0 -271
- package/core/integrations/issue-tracker/index.ts +0 -8
- package/core/integrations/issue-tracker/manager.ts +0 -286
- package/core/integrations/issue-tracker/types.ts +0 -310
- package/core/integrations/jira/cache.ts +0 -57
- package/core/integrations/jira/client.ts +0 -688
- package/core/integrations/jira/index.ts +0 -23
- package/core/integrations/jira/service.ts +0 -244
- package/core/integrations/linear/cache.ts +0 -68
- package/core/integrations/linear/client.ts +0 -436
- package/core/integrations/linear/index.ts +0 -20
- package/core/integrations/linear/service.ts +0 -260
- package/core/integrations/linear/sync.ts +0 -314
- package/core/outcomes/analyzer.ts +0 -286
- package/core/outcomes/index.ts +0 -34
- package/core/outcomes/recorder.ts +0 -195
- package/core/plugin/builtin/webhook.ts +0 -148
- package/core/plugin/hooks.ts +0 -315
- package/core/plugin/index.ts +0 -50
- package/core/plugin/loader.ts +0 -354
- package/core/plugin/registry.ts +0 -326
- package/core/schemas/agents.ts +0 -27
- package/core/schemas/analysis.ts +0 -530
- package/core/schemas/classification.ts +0 -91
- package/core/schemas/command-context.ts +0 -29
- package/core/schemas/enriched-task.ts +0 -291
- package/core/schemas/ideas.ts +0 -114
- package/core/schemas/index.ts +0 -53
- package/core/schemas/issues.ts +0 -159
- package/core/schemas/llm-output.ts +0 -170
- package/core/schemas/metrics.ts +0 -143
- package/core/schemas/model.ts +0 -153
- package/core/schemas/outcomes.ts +0 -487
- package/core/schemas/performance.ts +0 -128
- package/core/schemas/permissions.ts +0 -180
- package/core/schemas/prd.ts +0 -450
- package/core/schemas/project.ts +0 -57
- package/core/schemas/roadmap.ts +0 -322
- package/core/schemas/schemas.ts +0 -38
- package/core/schemas/shipped.ts +0 -109
- package/core/schemas/state.ts +0 -284
- package/core/schemas/velocity.ts +0 -103
- package/core/server/index.ts +0 -21
- package/core/server/routes-extended.ts +0 -566
- package/core/server/routes.ts +0 -176
- package/core/server/server.ts +0 -149
- package/core/server/sse.ts +0 -192
- package/core/services/agent-generator.ts +0 -385
- package/core/services/agent-service.ts +0 -168
- package/core/services/breakdown-service.ts +0 -124
- package/core/services/context-generator.ts +0 -445
- package/core/services/context-selector.ts +0 -429
- package/core/services/dependency-validator.ts +0 -318
- package/core/services/diff-generator.ts +0 -313
- package/core/services/doctor-service.ts +0 -423
- package/core/services/file-categorizer.ts +0 -448
- package/core/services/file-scorer.ts +0 -270
- package/core/services/git-analyzer.ts +0 -293
- package/core/services/hierarchical-agent-resolver.ts +0 -236
- package/core/services/hooks-service.ts +0 -685
- package/core/services/index.ts +0 -46
- package/core/services/local-state-generator.ts +0 -158
- package/core/services/memory-service.ts +0 -181
- package/core/services/nested-context-resolver.ts +0 -842
- package/core/services/project-index.ts +0 -911
- package/core/services/project-service.ts +0 -155
- package/core/services/session-tracker.ts +0 -287
- package/core/services/skill-installer.ts +0 -447
- package/core/services/skill-lock.ts +0 -132
- package/core/services/skill-service.ts +0 -306
- package/core/services/stack-detector.ts +0 -229
- package/core/services/staleness-checker.ts +0 -327
- package/core/services/sync-service.ts +0 -1515
- package/core/services/sync-verifier.ts +0 -253
- package/core/services/watch-service.ts +0 -312
- package/core/session/compaction.ts +0 -248
- package/core/session/index.ts +0 -35
- package/core/session/log-migration.ts +0 -88
- package/core/session/metrics.ts +0 -323
- package/core/session/session-log-manager.ts +0 -307
- package/core/session/task-session-manager.ts +0 -404
- package/core/session/utils.ts +0 -51
- package/core/storage/analysis-storage.ts +0 -373
- package/core/storage/archive-storage.ts +0 -205
- package/core/storage/database.ts +0 -575
- package/core/storage/ideas-storage.ts +0 -298
- package/core/storage/index-storage.ts +0 -523
- package/core/storage/index.ts +0 -79
- package/core/storage/metrics-storage.ts +0 -321
- package/core/storage/migrate-json.ts +0 -720
- package/core/storage/queue-storage.ts +0 -336
- package/core/storage/safe-reader.ts +0 -105
- package/core/storage/shipped-storage.ts +0 -253
- package/core/storage/state-storage.ts +0 -1035
- package/core/storage/storage-manager.ts +0 -205
- package/core/storage/storage.ts +0 -177
- package/core/storage/velocity-storage.ts +0 -149
- package/core/sync/auth-config.ts +0 -138
- package/core/sync/index.ts +0 -31
- package/core/sync/oauth-handler.ts +0 -143
- package/core/sync/sync-client.ts +0 -251
- package/core/sync/sync-manager.ts +0 -327
- package/core/tsconfig.json +0 -22
- package/core/types/agentic.ts +0 -760
- package/core/types/agents.ts +0 -150
- package/core/types/bus.ts +0 -193
- package/core/types/citations.ts +0 -22
- package/core/types/commands.ts +0 -399
- package/core/types/config.ts +0 -92
- package/core/types/core.ts +0 -96
- package/core/types/diff.ts +0 -41
- package/core/types/domain.ts +0 -71
- package/core/types/errors.ts +0 -111
- package/core/types/events.ts +0 -42
- package/core/types/fs.ts +0 -72
- package/core/types/index.ts +0 -510
- package/core/types/infrastructure.ts +0 -210
- package/core/types/integrations.ts +0 -31
- package/core/types/jira.ts +0 -51
- package/core/types/logger.ts +0 -17
- package/core/types/memory.ts +0 -313
- package/core/types/outcomes.ts +0 -190
- package/core/types/output.ts +0 -47
- package/core/types/plugin.ts +0 -25
- package/core/types/project-sync.ts +0 -129
- package/core/types/provider.ts +0 -163
- package/core/types/server.ts +0 -71
- package/core/types/services.ts +0 -84
- package/core/types/session.ts +0 -135
- package/core/types/stack.ts +0 -19
- package/core/types/storage.ts +0 -318
- package/core/types/sync-verifier.ts +0 -33
- package/core/types/sync.ts +0 -121
- package/core/types/task.ts +0 -72
- package/core/types/template.ts +0 -24
- package/core/types/utils.ts +0 -92
- package/core/types/workflow.ts +0 -23
- package/core/utils/agent-stream.ts +0 -140
- package/core/utils/animations.ts +0 -251
- package/core/utils/branding.ts +0 -88
- package/core/utils/cache.ts +0 -187
- package/core/utils/citations.ts +0 -39
- package/core/utils/collection-filters.ts +0 -209
- package/core/utils/date-helper.ts +0 -176
- package/core/utils/error-messages.ts +0 -38
- package/core/utils/file-helper.ts +0 -277
- package/core/utils/fs-helpers.ts +0 -14
- package/core/utils/help.ts +0 -314
- package/core/utils/jsonl-helper.ts +0 -290
- package/core/utils/keychain.ts +0 -127
- package/core/utils/logger.ts +0 -77
- package/core/utils/markdown-builder.ts +0 -280
- package/core/utils/next-steps.ts +0 -95
- package/core/utils/output.ts +0 -403
- package/core/utils/preserve-sections.ts +0 -218
- package/core/utils/project-commands.ts +0 -126
- package/core/utils/project-credentials.ts +0 -143
- package/core/utils/provider-cache.ts +0 -49
- package/core/utils/retry.ts +0 -318
- package/core/utils/runtime.ts +0 -108
- package/core/utils/session-helper.ts +0 -278
- package/core/utils/subtask-table.ts +0 -227
- package/core/utils/version.ts +0 -128
- package/core/wizard/index.ts +0 -13
- package/core/wizard/onboarding.ts +0 -633
- package/core/workflow/index.ts +0 -7
- package/core/workflow/state-machine.ts +0 -198
- package/core/workflow/workflow-preferences.ts +0 -294
- package/dist/core/infrastructure/command-installer.js +0 -1141
- package/dist/core/infrastructure/editors-config.js +0 -177
- package/dist/core/infrastructure/setup.js +0 -2244
- package/dist/core/utils/version.js +0 -141
- package/templates/agentic/agent-routing.md +0 -45
- package/templates/agentic/agents/uxui.md +0 -63
- package/templates/agentic/checklist-routing.md +0 -98
- package/templates/agentic/orchestrator.md +0 -68
- package/templates/agentic/task-fragmentation.md +0 -89
- package/templates/agents/AGENTS.md +0 -68
- package/templates/analysis/analyze.md +0 -84
- package/templates/analysis/patterns.md +0 -60
- package/templates/antigravity/SKILL.md +0 -39
- package/templates/architect/discovery.md +0 -67
- package/templates/architect/phases.md +0 -59
- package/templates/checklists/architecture.md +0 -28
- package/templates/checklists/code-quality.md +0 -28
- package/templates/checklists/data.md +0 -33
- package/templates/checklists/documentation.md +0 -33
- package/templates/checklists/infrastructure.md +0 -33
- package/templates/checklists/performance.md +0 -33
- package/templates/checklists/security.md +0 -33
- package/templates/checklists/testing.md +0 -33
- package/templates/checklists/ux-ui.md +0 -37
- package/templates/commands/analyze.md +0 -56
- package/templates/commands/auth.md +0 -234
- package/templates/commands/bug.md +0 -163
- package/templates/commands/cleanup.md +0 -19
- package/templates/commands/dash.md +0 -99
- package/templates/commands/design.md +0 -15
- package/templates/commands/done.md +0 -291
- package/templates/commands/enrich.md +0 -174
- package/templates/commands/git.md +0 -295
- package/templates/commands/history.md +0 -389
- package/templates/commands/idea.md +0 -88
- package/templates/commands/impact.md +0 -864
- package/templates/commands/init.md +0 -54
- package/templates/commands/jira.md +0 -278
- package/templates/commands/linear.md +0 -288
- package/templates/commands/merge.md +0 -206
- package/templates/commands/next.md +0 -80
- package/templates/commands/p.md +0 -67
- package/templates/commands/p.toml +0 -37
- package/templates/commands/pause.md +0 -136
- package/templates/commands/plan.md +0 -696
- package/templates/commands/prd.md +0 -356
- package/templates/commands/resume.md +0 -171
- package/templates/commands/review.md +0 -276
- package/templates/commands/serve.md +0 -118
- package/templates/commands/setup.md +0 -91
- package/templates/commands/ship.md +0 -475
- package/templates/commands/skill.md +0 -259
- package/templates/commands/spec.md +0 -218
- package/templates/commands/status.md +0 -207
- package/templates/commands/sync.md +0 -104
- package/templates/commands/task.md +0 -312
- package/templates/commands/test.md +0 -93
- package/templates/commands/update.md +0 -63
- package/templates/commands/verify.md +0 -204
- package/templates/commands/workflow.md +0 -150
- package/templates/config/skill-mappings.json +0 -82
- package/templates/context/dashboard.md +0 -256
- package/templates/context/roadmap.md +0 -221
- package/templates/cursor/commands/bug.md +0 -8
- package/templates/cursor/commands/done.md +0 -4
- package/templates/cursor/commands/pause.md +0 -6
- package/templates/cursor/commands/resume.md +0 -4
- package/templates/cursor/commands/ship.md +0 -8
- package/templates/cursor/commands/sync.md +0 -4
- package/templates/cursor/commands/task.md +0 -8
- package/templates/cursor/p.md +0 -29
- package/templates/cursor/router.mdc +0 -28
- package/templates/design/api.md +0 -95
- package/templates/design/architecture.md +0 -77
- package/templates/design/component.md +0 -89
- package/templates/design/database.md +0 -78
- package/templates/design/flow.md +0 -94
- package/templates/global/ANTIGRAVITY.md +0 -254
- package/templates/global/CLAUDE.md +0 -497
- package/templates/global/CURSOR.mdc +0 -266
- package/templates/global/GEMINI.md +0 -293
- package/templates/global/STORAGE-SPEC.md +0 -391
- package/templates/global/WINDSURF.md +0 -266
- package/templates/global/modules/CLAUDE-commands.md +0 -70
- package/templates/global/modules/CLAUDE-core.md +0 -105
- package/templates/global/modules/CLAUDE-git.md +0 -50
- package/templates/global/modules/CLAUDE-intelligence.md +0 -92
- package/templates/global/modules/CLAUDE-storage.md +0 -50
- package/templates/global/modules/module-config.json +0 -36
- package/templates/mcp-config.json +0 -19
- package/templates/permissions/default.jsonc +0 -60
- package/templates/permissions/permissive.jsonc +0 -49
- package/templates/permissions/strict.jsonc +0 -58
- package/templates/planning-methodology.md +0 -195
- package/templates/skills/code-review.md +0 -47
- package/templates/skills/debug.md +0 -61
- package/templates/skills/refactor.md +0 -47
- package/templates/subagents/agent-base.md +0 -20
- package/templates/subagents/domain/backend.md +0 -109
- package/templates/subagents/domain/database.md +0 -121
- package/templates/subagents/domain/devops.md +0 -152
- package/templates/subagents/domain/frontend.md +0 -103
- package/templates/subagents/domain/testing.md +0 -169
- package/templates/subagents/pm-expert.md +0 -366
- package/templates/subagents/workflow/chief-architect.md +0 -657
- package/templates/subagents/workflow/prjct-planner.md +0 -159
- package/templates/subagents/workflow/prjct-shipper.md +0 -188
- package/templates/subagents/workflow/prjct-workflow.md +0 -98
- package/templates/tools/bash.txt +0 -22
- package/templates/tools/edit.txt +0 -18
- package/templates/tools/glob.txt +0 -19
- package/templates/tools/grep.txt +0 -21
- package/templates/tools/read.txt +0 -14
- package/templates/tools/task.txt +0 -20
- package/templates/tools/webfetch.txt +0 -16
- package/templates/tools/websearch.txt +0 -18
- package/templates/tools/write.txt +0 -17
- package/templates/windsurf/router.md +0 -28
- package/templates/windsurf/workflows/bug.md +0 -8
- package/templates/windsurf/workflows/done.md +0 -4
- package/templates/windsurf/workflows/pause.md +0 -4
- package/templates/windsurf/workflows/resume.md +0 -4
- package/templates/windsurf/workflows/ship.md +0 -8
- package/templates/windsurf/workflows/sync.md +0 -4
- package/templates/windsurf/workflows/task.md +0 -8
|
@@ -1,295 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
allowed-tools: [Bash, Read, Write, AskUserQuestion]
|
|
3
|
-
description: 'Smart git operations with context'
|
|
4
|
-
architecture: 'Write-Through (JSON → MD → Events)'
|
|
5
|
-
storage-layer: true
|
|
6
|
-
source-of-truth: 'storage/state.json'
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# /p:git - Smart Git Operations
|
|
10
|
-
|
|
11
|
-
## ⛔ MANDATORY WORKFLOW - FOLLOW STEPS IN ORDER
|
|
12
|
-
|
|
13
|
-
**All git operations through prjct MUST follow these rules.**
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
## Usage
|
|
18
|
-
|
|
19
|
-
```
|
|
20
|
-
/p:git commit # Smart commit with metadata
|
|
21
|
-
/p:git push # Push with verification
|
|
22
|
-
/p:git sync # Pull, rebase, push
|
|
23
|
-
/p:git undo # Undo last commit
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
## ⛔ GLOBAL BLOCKING RULES
|
|
27
|
-
|
|
28
|
-
### Rule 1: Protected Branch Check (ALL OPERATIONS)
|
|
29
|
-
|
|
30
|
-
```bash
|
|
31
|
-
CURRENT_BRANCH=$(git branch --show-current)
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
**⛔ IF branch is `main` or `master`:**
|
|
35
|
-
```
|
|
36
|
-
For commit: STOP. "Cannot commit on main. Create a feature branch."
|
|
37
|
-
For push: STOP. "Cannot push to main. Use p. ship to create PR."
|
|
38
|
-
ABORT the operation entirely.
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
### Rule 2: Dirty Working Directory
|
|
42
|
-
|
|
43
|
-
```bash
|
|
44
|
-
git status --porcelain
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
**⛔ IF uncommitted changes AND operation is push/sync:**
|
|
48
|
-
```
|
|
49
|
-
STOP. "Uncommitted changes detected. Commit first with p. git commit."
|
|
50
|
-
ABORT.
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
## Context Variables
|
|
54
|
-
- `{projectId}`: From `.prjct/prjct.config.json`
|
|
55
|
-
- `{globalPath}`: `~/.prjct-cli/projects/{projectId}`
|
|
56
|
-
- `{statePath}`: `{globalPath}/storage/state.json`
|
|
57
|
-
- `{memoryPath}`: `{globalPath}/memory/events.jsonl`
|
|
58
|
-
|
|
59
|
-
## Flow: commit
|
|
60
|
-
|
|
61
|
-
### Step 1: Pre-flight Checks (BLOCKING)
|
|
62
|
-
|
|
63
|
-
```bash
|
|
64
|
-
# Get current branch
|
|
65
|
-
CURRENT_BRANCH=$(git branch --show-current)
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
**⛔ IF on main/master:**
|
|
69
|
-
```
|
|
70
|
-
STOP. DO NOT PROCEED.
|
|
71
|
-
OUTPUT: "Cannot commit on protected branch: {currentBranch}"
|
|
72
|
-
OUTPUT: "Create a feature branch first with: p. task 'description'"
|
|
73
|
-
ABORT.
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
```bash
|
|
77
|
-
# Check for changes
|
|
78
|
-
git status --porcelain
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
**⛔ IF no changes:**
|
|
82
|
-
```
|
|
83
|
-
STOP. DO NOT PROCEED.
|
|
84
|
-
OUTPUT: "Nothing to commit."
|
|
85
|
-
ABORT.
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
### Step 2: Show Plan and Get Approval (BLOCKING)
|
|
89
|
-
|
|
90
|
-
```bash
|
|
91
|
-
git diff --stat
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
Show the user:
|
|
95
|
-
```
|
|
96
|
-
## Commit Plan
|
|
97
|
-
|
|
98
|
-
Branch: {currentBranch}
|
|
99
|
-
Changes:
|
|
100
|
-
{git diff --stat output}
|
|
101
|
-
|
|
102
|
-
Will create commit with prjct footer.
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
Then ask for confirmation:
|
|
106
|
-
|
|
107
|
-
```
|
|
108
|
-
AskUserQuestion:
|
|
109
|
-
question: "Create this commit?"
|
|
110
|
-
header: "Commit"
|
|
111
|
-
options:
|
|
112
|
-
- label: "Yes, commit (Recommended)"
|
|
113
|
-
description: "Stage all changes and commit"
|
|
114
|
-
- label: "No, cancel"
|
|
115
|
-
description: "Abort commit"
|
|
116
|
-
- label: "Show full diff"
|
|
117
|
-
description: "See detailed changes"
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
**Handle responses:**
|
|
121
|
-
|
|
122
|
-
**If "Show full diff":**
|
|
123
|
-
- Run `git diff` to show full changes
|
|
124
|
-
- Ask again with Yes/No options only
|
|
125
|
-
|
|
126
|
-
**If "No, cancel":**
|
|
127
|
-
```
|
|
128
|
-
OUTPUT: "✅ Commit cancelled"
|
|
129
|
-
STOP - Do not continue
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
**If "Yes, commit":**
|
|
133
|
-
CONTINUE to Step 3
|
|
134
|
-
|
|
135
|
-
### Step 3: Stage and Commit
|
|
136
|
-
|
|
137
|
-
```bash
|
|
138
|
-
git add .
|
|
139
|
-
git commit -m "$(cat <<'EOF'
|
|
140
|
-
{type}: {description}
|
|
141
|
-
|
|
142
|
-
Generated with [p/](https://www.prjct.app/)
|
|
143
|
-
EOF
|
|
144
|
-
)"
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
**⛔ The prjct footer is MANDATORY. No exceptions.**
|
|
148
|
-
|
|
149
|
-
### Step 4: Log to Memory
|
|
150
|
-
|
|
151
|
-
APPEND to `{globalPath}/memory/events.jsonl`
|
|
152
|
-
|
|
153
|
-
## Flow: push
|
|
154
|
-
|
|
155
|
-
### Step 1: Pre-flight Checks (BLOCKING)
|
|
156
|
-
|
|
157
|
-
```bash
|
|
158
|
-
CURRENT_BRANCH=$(git branch --show-current)
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
**⛔ IF on main/master:**
|
|
162
|
-
```
|
|
163
|
-
STOP. DO NOT PROCEED.
|
|
164
|
-
OUTPUT: "Cannot push directly to main/master."
|
|
165
|
-
OUTPUT: "Use `p. ship` to create a Pull Request instead."
|
|
166
|
-
ABORT.
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
```bash
|
|
170
|
-
git status --porcelain
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
**⛔ IF uncommitted changes:**
|
|
174
|
-
```
|
|
175
|
-
STOP. DO NOT PROCEED.
|
|
176
|
-
OUTPUT: "Uncommitted changes detected. Commit first."
|
|
177
|
-
ABORT.
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
### Step 2: Show Plan and Get Approval (BLOCKING)
|
|
181
|
-
|
|
182
|
-
```bash
|
|
183
|
-
git log origin/{currentBranch}..HEAD --oneline 2>/dev/null || git log --oneline -3
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
Show the user:
|
|
187
|
-
```
|
|
188
|
-
## Push Plan
|
|
189
|
-
|
|
190
|
-
Branch: {currentBranch}
|
|
191
|
-
Commits to push:
|
|
192
|
-
{commits}
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
Then ask for confirmation:
|
|
196
|
-
|
|
197
|
-
```
|
|
198
|
-
AskUserQuestion:
|
|
199
|
-
question: "Push these commits?"
|
|
200
|
-
header: "Push"
|
|
201
|
-
options:
|
|
202
|
-
- label: "Yes, push (Recommended)"
|
|
203
|
-
description: "Push to remote origin"
|
|
204
|
-
- label: "No, cancel"
|
|
205
|
-
description: "Keep commits local"
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
**Handle responses:**
|
|
209
|
-
|
|
210
|
-
**If "No, cancel":**
|
|
211
|
-
```
|
|
212
|
-
OUTPUT: "✅ Push cancelled"
|
|
213
|
-
STOP - Do not continue
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
**If "Yes, push":**
|
|
217
|
-
CONTINUE to Step 3
|
|
218
|
-
|
|
219
|
-
### Step 3: Execute Push
|
|
220
|
-
|
|
221
|
-
```bash
|
|
222
|
-
git push -u origin {currentBranch}
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
**IF push fails:** Show error and STOP. Do not retry automatically.
|
|
226
|
-
|
|
227
|
-
## Flow: sync
|
|
228
|
-
|
|
229
|
-
1. Git: `pull --rebase`
|
|
230
|
-
2. Resolve: conflicts if any
|
|
231
|
-
3. Git: `push`
|
|
232
|
-
|
|
233
|
-
## Commit Message Format (CRITICAL - ALWAYS USE)
|
|
234
|
-
|
|
235
|
-
**Every commit MUST include the prjct signature:**
|
|
236
|
-
|
|
237
|
-
```
|
|
238
|
-
{type}: {description}
|
|
239
|
-
|
|
240
|
-
{details if any}
|
|
241
|
-
|
|
242
|
-
Generated with [p/](https://www.prjct.app/)
|
|
243
|
-
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
**NON-NEGOTIABLE: The `Generated with [p/]` line MUST appear in ALL commits.**
|
|
247
|
-
|
|
248
|
-
Use HEREDOC for proper formatting:
|
|
249
|
-
```bash
|
|
250
|
-
git commit -m "$(cat <<'EOF'
|
|
251
|
-
{type}: {description}
|
|
252
|
-
|
|
253
|
-
Generated with [p/](https://www.prjct.app/)
|
|
254
|
-
|
|
255
|
-
EOF
|
|
256
|
-
)"
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
## Response
|
|
260
|
-
|
|
261
|
-
### Success
|
|
262
|
-
```
|
|
263
|
-
✅ Git {operation}
|
|
264
|
-
|
|
265
|
-
Branch: {currentBranch}
|
|
266
|
-
{operation_details}
|
|
267
|
-
|
|
268
|
-
/p:ship | /p:status
|
|
269
|
-
```
|
|
270
|
-
|
|
271
|
-
### Protected Branch Block
|
|
272
|
-
```
|
|
273
|
-
⚠️ Cannot {operation} on protected branch: {currentBranch}
|
|
274
|
-
|
|
275
|
-
Use /p:ship to create a Pull Request instead.
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
### Branch Mismatch
|
|
279
|
-
```
|
|
280
|
-
⚠️ Branch mismatch
|
|
281
|
-
|
|
282
|
-
Current: {currentBranch}
|
|
283
|
-
Expected: {expectedBranch}
|
|
284
|
-
|
|
285
|
-
Switch to the correct branch: git checkout {expectedBranch}
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
## Error Handling
|
|
289
|
-
|
|
290
|
-
| Error | Response | Action |
|
|
291
|
-
|-------|----------|--------|
|
|
292
|
-
| On protected branch | "Cannot {op} on protected branch" | STOP |
|
|
293
|
-
| Branch mismatch | Show expected vs current | STOP |
|
|
294
|
-
| Push fails | "Push failed. Try: git pull --rebase" | STOP |
|
|
295
|
-
| Conflicts | Show conflicted files | STOP |
|
|
@@ -1,389 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
allowed-tools: [Read, Write, Bash]
|
|
3
|
-
description: 'View snapshot history and undo/redo changes'
|
|
4
|
-
timestamp-rule: 'GetTimestamp() for ALL timestamps'
|
|
5
|
-
architecture: 'Write-Through (JSON → MD → Events)'
|
|
6
|
-
storage-layer: true
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# p. history - Snapshot History & Undo/Redo
|
|
10
|
-
|
|
11
|
-
**ARGUMENTS**: $ARGUMENTS
|
|
12
|
-
|
|
13
|
-
Unified command for viewing snapshot history and managing undo/redo operations.
|
|
14
|
-
|
|
15
|
-
## Context Variables
|
|
16
|
-
|
|
17
|
-
- `{projectId}`: From `.prjct/prjct.config.json`
|
|
18
|
-
- `{globalPath}`: `~/.prjct-cli/projects/{projectId}`
|
|
19
|
-
- `{snapshotDir}`: `{globalPath}/snapshots`
|
|
20
|
-
- `{memoryPath}`: `{globalPath}/memory/events.jsonl`
|
|
21
|
-
- `{redoStackPath}`: `{snapshotDir}/redo-stack.json`
|
|
22
|
-
- `{limit}`: Number of snapshots to show (default: 10)
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## Subcommands
|
|
27
|
-
|
|
28
|
-
| Command | Description |
|
|
29
|
-
|---------|-------------|
|
|
30
|
-
| `p. history` | Show snapshot history (default) |
|
|
31
|
-
| `p. history undo` | Revert to previous snapshot |
|
|
32
|
-
| `p. history redo` | Redo previously undone changes |
|
|
33
|
-
|
|
34
|
-
---
|
|
35
|
-
|
|
36
|
-
## Step 1: Validate Project
|
|
37
|
-
|
|
38
|
-
```
|
|
39
|
-
READ: .prjct/prjct.config.json
|
|
40
|
-
EXTRACT: projectId
|
|
41
|
-
|
|
42
|
-
IF file not found:
|
|
43
|
-
OUTPUT: "No prjct project. Run `p. init` first."
|
|
44
|
-
STOP
|
|
45
|
-
|
|
46
|
-
SET: globalPath = ~/.prjct-cli/projects/{projectId}
|
|
47
|
-
SET: snapshotDir = {globalPath}/snapshots
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
---
|
|
51
|
-
|
|
52
|
-
## Step 2: Route by Subcommand
|
|
53
|
-
|
|
54
|
-
```
|
|
55
|
-
PARSE: $ARGUMENTS
|
|
56
|
-
SET: subcommand = first word (or empty for default)
|
|
57
|
-
|
|
58
|
-
ROUTE:
|
|
59
|
-
- no args OR "list" → Show History (default)
|
|
60
|
-
- "undo" → Execute Undo
|
|
61
|
-
- "redo" → Execute Redo
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
---
|
|
65
|
-
|
|
66
|
-
## Subcommand: (default) - Show History
|
|
67
|
-
|
|
68
|
-
### Check Snapshots Exist
|
|
69
|
-
|
|
70
|
-
```bash
|
|
71
|
-
ls {snapshotDir}/.git 2>/dev/null || echo "NO_SNAPSHOTS"
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
IF output contains "NO_SNAPSHOTS":
|
|
75
|
-
OUTPUT: "⚠️ No snapshots yet. Create one with `p. ship`."
|
|
76
|
-
STOP
|
|
77
|
-
|
|
78
|
-
### Get Snapshot History
|
|
79
|
-
|
|
80
|
-
```bash
|
|
81
|
-
cd {snapshotDir} && git log --pretty=format:'%h|%s|%ar|%ai' -n {limit}
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
PARSE each line:
|
|
85
|
-
- `{shortHash}`: Before first `|`
|
|
86
|
-
- `{message}`: Between first and second `|`
|
|
87
|
-
- `{relativeTime}`: Between second and third `|`
|
|
88
|
-
- `{absoluteTime}`: After third `|`
|
|
89
|
-
|
|
90
|
-
### Get Current Position
|
|
91
|
-
|
|
92
|
-
```bash
|
|
93
|
-
cd {snapshotDir} && git rev-parse --short HEAD
|
|
94
|
-
```
|
|
95
|
-
CAPTURE as {currentHash}
|
|
96
|
-
|
|
97
|
-
### Check Redo Stack
|
|
98
|
-
|
|
99
|
-
READ: `{redoStackPath}`
|
|
100
|
-
|
|
101
|
-
IF file exists AND not empty AND not "[]":
|
|
102
|
-
PARSE as JSON array
|
|
103
|
-
COUNT items as {redoCount}
|
|
104
|
-
ELSE:
|
|
105
|
-
{redoCount} = 0
|
|
106
|
-
|
|
107
|
-
### Output
|
|
108
|
-
|
|
109
|
-
```
|
|
110
|
-
📜 Snapshot History
|
|
111
|
-
|
|
112
|
-
| # | Hash | Description | When |
|
|
113
|
-
|---|---------|------------------------------|-------------|
|
|
114
|
-
{FOR EACH snapshot in history:}
|
|
115
|
-
| {index} | {shortHash} | {message}{IF shortHash == currentHash: " [← NOW]"} | {relativeTime} |
|
|
116
|
-
{END FOR}
|
|
117
|
-
|
|
118
|
-
Current: {currentHash}
|
|
119
|
-
Redo available: {redoCount} snapshot(s)
|
|
120
|
-
|
|
121
|
-
Commands:
|
|
122
|
-
• `p. history undo` - Revert to previous snapshot
|
|
123
|
-
• `p. history redo` - Redo if available ({redoCount})
|
|
124
|
-
• `p. ship` - Create new snapshot
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
---
|
|
128
|
-
|
|
129
|
-
## Subcommand: undo
|
|
130
|
-
|
|
131
|
-
Reverts the project to the previous snapshot state.
|
|
132
|
-
|
|
133
|
-
### Check Snapshot History
|
|
134
|
-
|
|
135
|
-
```bash
|
|
136
|
-
cd {snapshotDir} && git log --oneline -5 2>/dev/null || echo "NO_SNAPSHOTS"
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
IF output contains "NO_SNAPSHOTS" OR empty:
|
|
140
|
-
OUTPUT: "No snapshots available. Create one with `p. ship` first."
|
|
141
|
-
STOP
|
|
142
|
-
|
|
143
|
-
CAPTURE last two lines as:
|
|
144
|
-
- {currentHash}: First line (current snapshot)
|
|
145
|
-
- {previousHash}: Second line (snapshot to restore)
|
|
146
|
-
|
|
147
|
-
IF only one snapshot exists:
|
|
148
|
-
OUTPUT: "Only one snapshot exists. Nothing to undo."
|
|
149
|
-
STOP
|
|
150
|
-
|
|
151
|
-
### Get State Info
|
|
152
|
-
|
|
153
|
-
```bash
|
|
154
|
-
cd {snapshotDir} && git log -1 --pretty=format:'%s' {currentHash}
|
|
155
|
-
```
|
|
156
|
-
CAPTURE as {currentMessage}
|
|
157
|
-
|
|
158
|
-
```bash
|
|
159
|
-
cd {snapshotDir} && git log -1 --pretty=format:'%s' {previousHash}
|
|
160
|
-
```
|
|
161
|
-
CAPTURE as {previousMessage}
|
|
162
|
-
|
|
163
|
-
### Get Files That Will Change
|
|
164
|
-
|
|
165
|
-
```bash
|
|
166
|
-
cd {snapshotDir} && git diff --name-only {previousHash} {currentHash}
|
|
167
|
-
```
|
|
168
|
-
CAPTURE as {affectedFiles}
|
|
169
|
-
COUNT files as {fileCount}
|
|
170
|
-
|
|
171
|
-
### Save Current State to Redo Stack
|
|
172
|
-
|
|
173
|
-
READ: `{redoStackPath}` (create if not exists with `[]`)
|
|
174
|
-
PARSE as JSON array
|
|
175
|
-
|
|
176
|
-
ADD to array:
|
|
177
|
-
```json
|
|
178
|
-
{
|
|
179
|
-
"hash": "{currentHash}",
|
|
180
|
-
"message": "{currentMessage}",
|
|
181
|
-
"timestamp": "{GetTimestamp()}"
|
|
182
|
-
}
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
WRITE: `{redoStackPath}`
|
|
186
|
-
|
|
187
|
-
### Restore Previous Snapshot
|
|
188
|
-
|
|
189
|
-
```bash
|
|
190
|
-
cd {snapshotDir} && git checkout {previousHash} -- .
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
Copy files back to project for each file in {affectedFiles}:
|
|
194
|
-
- Source: `{snapshotDir}/{file}`
|
|
195
|
-
- Destination: `{projectPath}/{file}`
|
|
196
|
-
|
|
197
|
-
### Log to Memory
|
|
198
|
-
|
|
199
|
-
APPEND to: `{memoryPath}`
|
|
200
|
-
```json
|
|
201
|
-
{"timestamp":"{GetTimestamp()}","action":"snapshot_undo","from":"{currentHash}","to":"{previousHash}","files":{fileCount}}
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
### Log to Manifest
|
|
205
|
-
|
|
206
|
-
APPEND to: `{snapshotDir}/manifest.jsonl`
|
|
207
|
-
```json
|
|
208
|
-
{"type":"undo","from":"{currentHash}","to":"{previousHash}","timestamp":"{GetTimestamp()}","files":{fileCount}}
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
### Output
|
|
212
|
-
|
|
213
|
-
```
|
|
214
|
-
⏪ Undone: {currentMessage}
|
|
215
|
-
|
|
216
|
-
Restored to: {previousMessage}
|
|
217
|
-
Files affected: {fileCount}
|
|
218
|
-
|
|
219
|
-
`p. history redo` to redo | `p. history` to see all snapshots
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
---
|
|
223
|
-
|
|
224
|
-
## Subcommand: redo
|
|
225
|
-
|
|
226
|
-
Restores a previously undone snapshot.
|
|
227
|
-
|
|
228
|
-
### Check Redo Stack
|
|
229
|
-
|
|
230
|
-
READ: `{redoStackPath}`
|
|
231
|
-
|
|
232
|
-
IF file not found OR empty OR equals "[]":
|
|
233
|
-
OUTPUT: "Nothing to redo. Use `p. history undo` first."
|
|
234
|
-
STOP
|
|
235
|
-
|
|
236
|
-
PARSE as JSON array
|
|
237
|
-
GET last item as {redoSnapshot}
|
|
238
|
-
|
|
239
|
-
IF array is empty:
|
|
240
|
-
OUTPUT: "Nothing to redo. Use `p. history undo` first."
|
|
241
|
-
STOP
|
|
242
|
-
|
|
243
|
-
EXTRACT from {redoSnapshot}:
|
|
244
|
-
- `{redoHash}`: hash
|
|
245
|
-
- `{redoMessage}`: message
|
|
246
|
-
- `{redoTimestamp}`: timestamp
|
|
247
|
-
|
|
248
|
-
### Get Current State
|
|
249
|
-
|
|
250
|
-
```bash
|
|
251
|
-
cd {snapshotDir} && git rev-parse HEAD
|
|
252
|
-
```
|
|
253
|
-
CAPTURE as {currentHash}
|
|
254
|
-
|
|
255
|
-
```bash
|
|
256
|
-
cd {snapshotDir} && git log -1 --pretty=format:'%s' {currentHash}
|
|
257
|
-
```
|
|
258
|
-
CAPTURE as {currentMessage}
|
|
259
|
-
|
|
260
|
-
### Get Files That Will Change
|
|
261
|
-
|
|
262
|
-
```bash
|
|
263
|
-
cd {snapshotDir} && git diff --name-only {currentHash} {redoHash}
|
|
264
|
-
```
|
|
265
|
-
CAPTURE as {affectedFiles}
|
|
266
|
-
COUNT files as {fileCount}
|
|
267
|
-
|
|
268
|
-
### Restore Redo Snapshot
|
|
269
|
-
|
|
270
|
-
```bash
|
|
271
|
-
cd {snapshotDir} && git checkout {redoHash} -- .
|
|
272
|
-
```
|
|
273
|
-
|
|
274
|
-
Copy files back to project for each file in {affectedFiles}:
|
|
275
|
-
- Source: `{snapshotDir}/{file}`
|
|
276
|
-
- Destination: `{projectPath}/{file}`
|
|
277
|
-
|
|
278
|
-
### Remove from Redo Stack
|
|
279
|
-
|
|
280
|
-
READ: `{redoStackPath}`
|
|
281
|
-
PARSE as JSON array
|
|
282
|
-
REMOVE last item
|
|
283
|
-
WRITE: `{redoStackPath}`
|
|
284
|
-
|
|
285
|
-
### Log to Memory
|
|
286
|
-
|
|
287
|
-
APPEND to: `{memoryPath}`
|
|
288
|
-
```json
|
|
289
|
-
{"timestamp":"{GetTimestamp()}","action":"snapshot_redo","from":"{currentHash}","to":"{redoHash}","files":{fileCount}}
|
|
290
|
-
```
|
|
291
|
-
|
|
292
|
-
### Log to Manifest
|
|
293
|
-
|
|
294
|
-
APPEND to: `{snapshotDir}/manifest.jsonl`
|
|
295
|
-
```json
|
|
296
|
-
{"type":"redo","from":"{currentHash}","to":"{redoHash}","timestamp":"{GetTimestamp()}","files":{fileCount}}
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
### Output
|
|
300
|
-
|
|
301
|
-
```
|
|
302
|
-
⏩ Redone: {redoMessage}
|
|
303
|
-
|
|
304
|
-
Restored from: {currentMessage}
|
|
305
|
-
Files affected: {fileCount}
|
|
306
|
-
|
|
307
|
-
`p. history undo` to undo again | `p. history` to see all snapshots
|
|
308
|
-
```
|
|
309
|
-
|
|
310
|
-
---
|
|
311
|
-
|
|
312
|
-
## Error Handling
|
|
313
|
-
|
|
314
|
-
| Error | Response | Action |
|
|
315
|
-
|-------|----------|--------|
|
|
316
|
-
| No project | "No prjct project" | STOP |
|
|
317
|
-
| No snapshots | Show empty state | STOP |
|
|
318
|
-
| Only one snapshot | "Nothing to undo" | STOP |
|
|
319
|
-
| Nothing to redo | "Use undo first" | STOP |
|
|
320
|
-
| Git error | Show error message | STOP |
|
|
321
|
-
| File copy fails | "Failed to restore {file}" | CONTINUE |
|
|
322
|
-
|
|
323
|
-
---
|
|
324
|
-
|
|
325
|
-
## Empty State
|
|
326
|
-
|
|
327
|
-
IF no snapshots:
|
|
328
|
-
```
|
|
329
|
-
📜 Snapshot History
|
|
330
|
-
|
|
331
|
-
No snapshots yet.
|
|
332
|
-
|
|
333
|
-
Create your first snapshot:
|
|
334
|
-
• `p. ship <feature>` - Ship a feature and create snapshot
|
|
335
|
-
```
|
|
336
|
-
|
|
337
|
-
---
|
|
338
|
-
|
|
339
|
-
## Examples
|
|
340
|
-
|
|
341
|
-
### Example 1: View History
|
|
342
|
-
```
|
|
343
|
-
p. history
|
|
344
|
-
|
|
345
|
-
📜 Snapshot History
|
|
346
|
-
|
|
347
|
-
| # | Hash | Description | When |
|
|
348
|
-
|---|---------|------------------------------|-------------|
|
|
349
|
-
| 1 | a1b2c3d | Ship user authentication | 2 hours ago |
|
|
350
|
-
| 2 | e4f5g6h | Add login form | 5 hours ago |
|
|
351
|
-
| 3 | i7j8k9l | Setup database models | 1 day ago |
|
|
352
|
-
|
|
353
|
-
Current: a1b2c3d
|
|
354
|
-
Redo available: 0 snapshot(s)
|
|
355
|
-
```
|
|
356
|
-
|
|
357
|
-
### Example 2: Undo
|
|
358
|
-
```
|
|
359
|
-
p. history undo
|
|
360
|
-
|
|
361
|
-
⏪ Undone: Ship user authentication
|
|
362
|
-
|
|
363
|
-
Restored to: Add login form
|
|
364
|
-
Files affected: 5
|
|
365
|
-
|
|
366
|
-
`p. history redo` to redo | `p. history` to see all snapshots
|
|
367
|
-
```
|
|
368
|
-
|
|
369
|
-
### Example 3: Redo
|
|
370
|
-
```
|
|
371
|
-
p. history redo
|
|
372
|
-
|
|
373
|
-
⏩ Redone: Ship user authentication
|
|
374
|
-
|
|
375
|
-
Restored from: Add login form
|
|
376
|
-
Files affected: 5
|
|
377
|
-
|
|
378
|
-
`p. history undo` to undo again | `p. history` to see all snapshots
|
|
379
|
-
```
|
|
380
|
-
|
|
381
|
-
---
|
|
382
|
-
|
|
383
|
-
## Notes
|
|
384
|
-
|
|
385
|
-
- History is non-destructive: current state is saved to redo stack before undo
|
|
386
|
-
- You can redo immediately after undoing
|
|
387
|
-
- Creating a new snapshot after undo clears the redo stack
|
|
388
|
-
- Multiple redos are possible if you undid multiple times
|
|
389
|
-
- Snapshots are project-specific, not global
|