specweave 1.0.585 → 1.0.587
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/.claude-plugin/marketplace.json +2 -2
- package/bin/specweave.js +56 -0
- package/dist/plugins/specweave/lib/integrations/github/github-access-error.d.ts +48 -0
- package/dist/plugins/specweave/lib/integrations/github/github-access-error.d.ts.map +1 -0
- package/dist/plugins/specweave/lib/integrations/github/github-access-error.js +69 -0
- package/dist/plugins/specweave/lib/integrations/github/github-access-error.js.map +1 -0
- package/dist/plugins/specweave/lib/integrations/github/github-client-v2.d.ts +8 -0
- package/dist/plugins/specweave/lib/integrations/github/github-client-v2.d.ts.map +1 -1
- package/dist/plugins/specweave/lib/integrations/github/github-client-v2.js +22 -2
- package/dist/plugins/specweave/lib/integrations/github/github-client-v2.js.map +1 -1
- package/dist/plugins/specweave/lib/vendor/generators/spec/task-parser.js +38 -16
- package/dist/plugins/specweave/lib/vendor/generators/spec/task-parser.js.map +1 -1
- package/dist/plugins/specweave/lib/vendor/utils/credential-masker.js +11 -1
- package/dist/plugins/specweave/lib/vendor/utils/credential-masker.js.map +1 -1
- package/dist/src/cli/commands/auto.js +1 -1
- package/dist/src/cli/commands/auto.js.map +1 -1
- package/dist/src/cli/commands/generate-rubric.d.ts +35 -0
- package/dist/src/cli/commands/generate-rubric.d.ts.map +1 -0
- package/dist/src/cli/commands/generate-rubric.js +73 -0
- package/dist/src/cli/commands/generate-rubric.js.map +1 -0
- package/dist/src/cli/commands/get.js +22 -9
- package/dist/src/cli/commands/get.js.map +1 -1
- package/dist/src/cli/commands/handoff.d.ts +54 -0
- package/dist/src/cli/commands/handoff.d.ts.map +1 -0
- package/dist/src/cli/commands/handoff.js +82 -0
- package/dist/src/cli/commands/handoff.js.map +1 -0
- package/dist/src/cli/commands/plan/plan-orchestrator.d.ts.map +1 -1
- package/dist/src/cli/commands/plan/plan-orchestrator.js +11 -0
- package/dist/src/cli/commands/plan/plan-orchestrator.js.map +1 -1
- package/dist/src/cli/commands/sync-health.d.ts.map +1 -1
- package/dist/src/cli/commands/sync-health.js +72 -12
- package/dist/src/cli/commands/sync-health.js.map +1 -1
- package/dist/src/cli/commands/sync-progress.d.ts.map +1 -1
- package/dist/src/cli/commands/sync-progress.js +65 -11
- package/dist/src/cli/commands/sync-progress.js.map +1 -1
- package/dist/src/cli/helpers/get/register-repo.d.ts.map +1 -1
- package/dist/src/cli/helpers/get/register-repo.js +28 -2
- package/dist/src/cli/helpers/get/register-repo.js.map +1 -1
- package/dist/src/cli/helpers/init/gitignore-generator.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/gitignore-generator.js +3 -0
- package/dist/src/cli/helpers/init/gitignore-generator.js.map +1 -1
- package/dist/src/cli/helpers/init/next-steps.js +1 -1
- package/dist/src/cli/helpers/init/next-steps.js.map +1 -1
- package/dist/src/core/analytics/analytics-collector.d.ts.map +1 -1
- package/dist/src/core/analytics/analytics-collector.js +9 -1
- package/dist/src/core/analytics/analytics-collector.js.map +1 -1
- package/dist/src/core/analytics/event-writer.d.ts.map +1 -1
- package/dist/src/core/analytics/event-writer.js +3 -1
- package/dist/src/core/analytics/event-writer.js.map +1 -1
- package/dist/src/core/config/config-manager.d.ts +5 -0
- package/dist/src/core/config/config-manager.d.ts.map +1 -1
- package/dist/src/core/config/config-manager.js +58 -1
- package/dist/src/core/config/config-manager.js.map +1 -1
- package/dist/src/core/credentials/credentials-manager.d.ts +21 -0
- package/dist/src/core/credentials/credentials-manager.d.ts.map +1 -1
- package/dist/src/core/credentials/credentials-manager.js +38 -0
- package/dist/src/core/credentials/credentials-manager.js.map +1 -1
- package/dist/src/core/hooks/handlers/hook-router.d.ts.map +1 -1
- package/dist/src/core/hooks/handlers/hook-router.js +5 -0
- package/dist/src/core/hooks/handlers/hook-router.js.map +1 -1
- package/dist/src/core/hooks/handlers/pre-compact.d.ts +33 -0
- package/dist/src/core/hooks/handlers/pre-compact.d.ts.map +1 -0
- package/dist/src/core/hooks/handlers/pre-compact.js +109 -0
- package/dist/src/core/hooks/handlers/pre-compact.js.map +1 -0
- package/dist/src/core/hooks/handlers/types.d.ts +1 -1
- package/dist/src/core/hooks/handlers/types.d.ts.map +1 -1
- package/dist/src/core/hooks/handlers/types.js +3 -0
- package/dist/src/core/hooks/handlers/types.js.map +1 -1
- package/dist/src/core/increment/completion-validator.d.ts.map +1 -1
- package/dist/src/core/increment/completion-validator.js +8 -1
- package/dist/src/core/increment/completion-validator.js.map +1 -1
- package/dist/src/core/increment/template-creator.d.ts.map +1 -1
- package/dist/src/core/increment/template-creator.js +5 -19
- package/dist/src/core/increment/template-creator.js.map +1 -1
- package/dist/src/core/llm/types.d.ts +5 -5
- package/dist/src/core/llm/types.d.ts.map +1 -1
- package/dist/src/core/llm/types.js +9 -8
- package/dist/src/core/llm/types.js.map +1 -1
- package/dist/src/core/rubric/rubric-evaluator.d.ts +25 -1
- package/dist/src/core/rubric/rubric-evaluator.d.ts.map +1 -1
- package/dist/src/core/rubric/rubric-evaluator.js +108 -1
- package/dist/src/core/rubric/rubric-evaluator.js.map +1 -1
- package/dist/src/core/rubric/rubric-generator.d.ts +28 -1
- package/dist/src/core/rubric/rubric-generator.d.ts.map +1 -1
- package/dist/src/core/rubric/rubric-generator.js +46 -6
- package/dist/src/core/rubric/rubric-generator.js.map +1 -1
- package/dist/src/core/rubric/rubric-parser.d.ts.map +1 -1
- package/dist/src/core/rubric/rubric-parser.js +18 -2
- package/dist/src/core/rubric/rubric-parser.js.map +1 -1
- package/dist/src/core/rubric/types.d.ts +1 -1
- package/dist/src/core/rubric/types.d.ts.map +1 -1
- package/dist/src/core/rubric/types.js.map +1 -1
- package/dist/src/core/session/handoff-doc-format.d.ts +164 -0
- package/dist/src/core/session/handoff-doc-format.d.ts.map +1 -0
- package/dist/src/core/session/handoff-doc-format.js +292 -0
- package/dist/src/core/session/handoff-doc-format.js.map +1 -0
- package/dist/src/core/session/handoff-git-state.d.ts +49 -0
- package/dist/src/core/session/handoff-git-state.d.ts.map +1 -0
- package/dist/src/core/session/handoff-git-state.js +164 -0
- package/dist/src/core/session/handoff-git-state.js.map +1 -0
- package/dist/src/core/session/handoff-secret-scrub.d.ts +59 -0
- package/dist/src/core/session/handoff-secret-scrub.d.ts.map +1 -0
- package/dist/src/core/session/handoff-secret-scrub.js +72 -0
- package/dist/src/core/session/handoff-secret-scrub.js.map +1 -0
- package/dist/src/core/session/{handoff-context.d.ts → install-handoff-context.d.ts} +7 -3
- package/dist/src/core/session/install-handoff-context.d.ts.map +1 -0
- package/dist/src/core/session/{handoff-context.js → install-handoff-context.js} +7 -3
- package/dist/src/core/session/install-handoff-context.js.map +1 -0
- package/dist/src/core/session/work-handoff.d.ts +88 -0
- package/dist/src/core/session/work-handoff.d.ts.map +1 -0
- package/dist/src/core/session/work-handoff.js +412 -0
- package/dist/src/core/session/work-handoff.js.map +1 -0
- package/dist/src/core/sync/retry-wrapper.d.ts +14 -2
- package/dist/src/core/sync/retry-wrapper.d.ts.map +1 -1
- package/dist/src/core/sync/retry-wrapper.js +15 -4
- package/dist/src/core/sync/retry-wrapper.js.map +1 -1
- package/dist/src/generators/spec/task-parser.d.ts.map +1 -1
- package/dist/src/generators/spec/task-parser.js +38 -16
- package/dist/src/generators/spec/task-parser.js.map +1 -1
- package/dist/src/integrations/ado/ado-pat-provider.d.ts +6 -2
- package/dist/src/integrations/ado/ado-pat-provider.d.ts.map +1 -1
- package/dist/src/integrations/ado/ado-pat-provider.js +16 -22
- package/dist/src/integrations/ado/ado-pat-provider.js.map +1 -1
- package/dist/src/sync/external-item-sync-service.d.ts.map +1 -1
- package/dist/src/sync/external-item-sync-service.js +6 -2
- package/dist/src/sync/external-item-sync-service.js.map +1 -1
- package/dist/src/sync/resilient-write.d.ts +42 -0
- package/dist/src/sync/resilient-write.d.ts.map +1 -0
- package/dist/src/sync/resilient-write.js +52 -0
- package/dist/src/sync/resilient-write.js.map +1 -0
- package/dist/src/sync/story-router.d.ts +10 -2
- package/dist/src/sync/story-router.d.ts.map +1 -1
- package/dist/src/sync/story-router.js.map +1 -1
- package/dist/src/sync/sync-coordinator.d.ts +11 -0
- package/dist/src/sync/sync-coordinator.d.ts.map +1 -1
- package/dist/src/sync/sync-coordinator.js +69 -26
- package/dist/src/sync/sync-coordinator.js.map +1 -1
- package/dist/src/sync/sync-target-resolver.d.ts +10 -6
- package/dist/src/sync/sync-target-resolver.d.ts.map +1 -1
- package/dist/src/sync/sync-target-resolver.js +66 -57
- package/dist/src/sync/sync-target-resolver.js.map +1 -1
- package/dist/src/utils/credential-masker.d.ts.map +1 -1
- package/dist/src/utils/credential-masker.js +11 -1
- package/dist/src/utils/credential-masker.js.map +1 -1
- package/dist/src/utils/structure-level-detector.d.ts +1 -1
- package/dist/src/utils/structure-level-detector.d.ts.map +1 -1
- package/dist/src/utils/structure-level-detector.js +23 -4
- package/dist/src/utils/structure-level-detector.js.map +1 -1
- package/package.json +1 -1
- package/plugins/specweave/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave/commands/handoff.md +54 -0
- package/plugins/specweave/defaults/rubric-defaults.md +6 -2
- package/plugins/specweave/lib/integrations/github/github-access-error.js +43 -0
- package/plugins/specweave/lib/integrations/github/github-access-error.ts +103 -0
- package/plugins/specweave/lib/integrations/github/github-client-v2.js +24 -4
- package/plugins/specweave/lib/integrations/github/github-client-v2.ts +26 -4
- package/plugins/specweave/lib/vendor/generators/spec/task-parser.js +38 -16
- package/plugins/specweave/lib/vendor/generators/spec/task-parser.js.map +1 -1
- package/plugins/specweave/lib/vendor/utils/credential-masker.js +11 -1
- package/plugins/specweave/lib/vendor/utils/credential-masker.js.map +1 -1
- package/plugins/specweave/skills/github-sync/SKILL.md +28 -566
- package/plugins/specweave/skills/github-sync/evals/evals.json +3 -3
- package/plugins/specweave/skills/handoff/SKILL.md +59 -0
- package/dist/src/core/session/handoff-context.d.ts.map +0 -1
- package/dist/src/core/session/handoff-context.js.map +0 -1
|
@@ -1,578 +1,40 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "[DEPRECATED]
|
|
3
|
-
version: 1.0.
|
|
2
|
+
description: "[DEPRECATED] GitHub sync guidance. Superseded by the live sw-github:* command family. For actual syncing use sw-github:push / sw-github:pull / sw-github:close / sw-github:sync."
|
|
3
|
+
version: 1.0.1
|
|
4
4
|
user-invokable: false
|
|
5
5
|
deprecated: true
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
> ⚠️ DEPRECATED
|
|
8
|
+
> ⚠️ DEPRECATED — superseded by the live `sw-github:*` command family.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
This skill's standalone guidance is retired. GitHub sync is performed by the
|
|
11
|
+
increment-based command family, which is the source of truth:
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
| Action | Live command |
|
|
14
|
+
|--------|--------------|
|
|
15
|
+
| Push local progress to GitHub Issues | `sw-github:push [increment-id]` |
|
|
16
|
+
| Pull issue state back into the spec | `sw-github:pull` |
|
|
17
|
+
| Create the GitHub Issue/milestone | `sw-github:create` |
|
|
18
|
+
| Close issues on increment completion | `sw-github:close` |
|
|
19
|
+
| Two-way reconcile | `sw-github:sync` |
|
|
20
|
+
| Check sync status | `sw-github:status` |
|
|
13
21
|
|
|
14
|
-
|
|
15
|
-
- **Removal**: Scheduled for v1.3.0 (2 minor releases after v1.1.0)
|
|
16
|
-
- **Why**: Consolidated sync logic moved to the `sw-github:*` command family. This skill's guidance content is now covered by `sw-github:sync-spec` help text and `.specweave/docs/internal/specs/github-sync.md`.
|
|
22
|
+
**Mapping** (per CLAUDE.md): Feature → Milestone · User Story → Issue · Task → Checkbox.
|
|
17
23
|
|
|
18
|
-
|
|
24
|
+
## Why this skill is deprecated
|
|
19
25
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
## When to Activate
|
|
31
|
-
|
|
32
|
-
✅ **Do activate when**:
|
|
33
|
-
- User asks: "How do I set up GitHub sync?"
|
|
34
|
-
- User asks: "What GitHub credentials do I need?"
|
|
35
|
-
- User asks: "How does the GitHub integration work?"
|
|
36
|
-
- User needs help configuring GitHub integration
|
|
37
|
-
|
|
38
|
-
❌ **Do NOT activate when**:
|
|
39
|
-
- User invokes `sw-github:sync-spec` command (command handles it)
|
|
40
|
-
- Command is already running (avoid duplicate invocation)
|
|
41
|
-
- Task completion hook is syncing (automatic process)
|
|
42
|
-
|
|
43
|
-
**Integration**: Works with `sw-github:sync-spec` command
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## CORRECT Architecture
|
|
48
|
-
|
|
49
|
-
**CRITICAL**: SpecWeave syncs **SPECS** to GitHub, NOT increments!
|
|
50
|
-
|
|
51
|
-
```
|
|
52
|
-
✅ CORRECT:
|
|
53
|
-
.specweave/docs/internal/specs/spec-001.md ↔ GitHub Project
|
|
54
|
-
├─ User Story US-001 ↔ GitHub Issue #1
|
|
55
|
-
├─ User Story US-002 ↔ GitHub Issue #2
|
|
56
|
-
└─ User Story US-003 ↔ GitHub Issue #3
|
|
57
|
-
|
|
58
|
-
❌ WRONG (OLD, REMOVED!):
|
|
59
|
-
.specweave/increments/0001-feature ↔ GitHub Issue (DEPRECATED!)
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
**Why Specs, Not Increments?**
|
|
63
|
-
- ✅ **Specs = Permanent** (living docs, feature-level knowledge base)
|
|
64
|
-
- ❌ **Increments = Temporary** (implementation snapshots, can be deleted after done)
|
|
65
|
-
- ✅ **GitHub should mirror PERMANENT work**, not temporary iterations
|
|
66
|
-
|
|
67
|
-
---
|
|
68
|
-
|
|
69
|
-
## How GitHub Sync Works
|
|
70
|
-
|
|
71
|
-
### 1. Spec → GitHub Project (Export)
|
|
72
|
-
|
|
73
|
-
**Trigger**: When spec is created or updated
|
|
74
|
-
|
|
75
|
-
**Actions**:
|
|
76
|
-
1. Create GitHub Project with:
|
|
77
|
-
- Title: `[SPEC-001] Core Framework & Architecture`
|
|
78
|
-
- Description: Spec overview + progress
|
|
79
|
-
- Columns: Backlog, In Progress, Done
|
|
80
|
-
- Linked to repository
|
|
81
|
-
|
|
82
|
-
2. Store project ID in spec metadata:
|
|
83
|
-
```yaml
|
|
84
|
-
# .specweave/docs/internal/specs/spec-001.md (frontmatter)
|
|
85
|
-
---
|
|
86
|
-
externalLinks:
|
|
87
|
-
github:
|
|
88
|
-
projectId: 123
|
|
89
|
-
projectUrl: https://github.com/users/anton-abyzov/projects/123
|
|
90
|
-
syncedAt: 2025-11-11T10:00:00Z
|
|
91
|
-
---
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
3. Create GitHub Issues for each user story:
|
|
95
|
-
- Title: `[US-001] As a developer, I want to install SpecWeave via NPM`
|
|
96
|
-
- Body: Acceptance criteria as checkboxes
|
|
97
|
-
- Labels: `user-story`, `spec:spec-001`, `priority:P1`
|
|
98
|
-
- Linked to project
|
|
99
|
-
|
|
100
|
-
**Example GitHub Project**:
|
|
101
|
-
```markdown
|
|
102
|
-
# [SPEC-001] Core Framework & Architecture
|
|
103
|
-
|
|
104
|
-
**Status**: In Progress (75% complete)
|
|
105
|
-
**Priority**: P0 (Critical)
|
|
106
|
-
**Feature Area**: Foundation & Plugin System
|
|
107
|
-
|
|
108
|
-
## Overview
|
|
109
|
-
|
|
110
|
-
The core framework and architecture spec covers SpecWeave's foundational capabilities:
|
|
111
|
-
- TypeScript-based CLI framework
|
|
112
|
-
- Plugin system architecture
|
|
113
|
-
- Cross-platform compatibility
|
|
114
|
-
|
|
115
|
-
## Progress
|
|
116
|
-
|
|
117
|
-
- ✅ US-001: NPM installation (Complete)
|
|
118
|
-
- ✅ US-002: Plugin system (Complete)
|
|
119
|
-
- ⏳ US-003: Context optimization (In Progress)
|
|
120
|
-
- ⏳ US-004: Intelligent agents (In Progress)
|
|
121
|
-
|
|
122
|
-
**Overall**: 2/4 user stories complete (50%)
|
|
123
|
-
|
|
124
|
-
---
|
|
125
|
-
|
|
126
|
-
🤖 Auto-synced by SpecWeave GitHub Plugin
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
### 2. User Story Progress Updates (Spec → GitHub)
|
|
130
|
-
|
|
131
|
-
**Trigger**: After each task completion (via post-task-completion hook)
|
|
132
|
-
|
|
133
|
-
**Actions**:
|
|
134
|
-
1. **Update GitHub Issue** (for user story):
|
|
135
|
-
- Updates acceptance criteria checkboxes
|
|
136
|
-
- Marks completed ACs with `[x]`
|
|
137
|
-
- Updates issue description
|
|
138
|
-
- Updates labels (`in-progress`, `testing`, `ready-for-review`)
|
|
139
|
-
|
|
140
|
-
2. **Update GitHub Project**:
|
|
141
|
-
- Moves cards between columns (Backlog → In Progress → Done)
|
|
142
|
-
- Updates project progress percentage
|
|
143
|
-
- Posts progress comment
|
|
144
|
-
|
|
145
|
-
**Example Issue Update**:
|
|
146
|
-
```markdown
|
|
147
|
-
**User Story**: US-001
|
|
148
|
-
|
|
149
|
-
As a developer, I want to install SpecWeave via NPM so that I can use it in my projects
|
|
150
|
-
|
|
151
|
-
## Acceptance Criteria
|
|
152
|
-
|
|
153
|
-
- [x] AC-001-01: `npm install -g specweave` works
|
|
154
|
-
- [x] AC-001-02: `specweave init` creates `.specweave/` structure
|
|
155
|
-
- [ ] AC-001-03: Version command shows current version (In Progress)
|
|
156
|
-
|
|
157
|
-
---
|
|
158
|
-
|
|
159
|
-
**Progress**: 2/3 ACs complete (67%)
|
|
160
|
-
|
|
161
|
-
🤖 Auto-updated by SpecWeave (2025-11-11)
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
### 3. Spec Completion (Close Project)
|
|
165
|
-
|
|
166
|
-
**Trigger**: All user stories in spec are complete
|
|
167
|
-
|
|
168
|
-
**Actions**:
|
|
169
|
-
1. Close all GitHub Issues (user stories)
|
|
170
|
-
2. Archive GitHub Project
|
|
171
|
-
3. Post final comment:
|
|
172
|
-
```markdown
|
|
173
|
-
✅ **Spec Completed**
|
|
174
|
-
|
|
175
|
-
**Final Stats**:
|
|
176
|
-
- 35 user stories completed (100%)
|
|
177
|
-
- 4 increments implemented (0001, 0002, 0004, 0005)
|
|
178
|
-
- Duration: 6 weeks
|
|
179
|
-
|
|
180
|
-
**Deliverables**:
|
|
181
|
-
- Core framework architecture
|
|
182
|
-
- Plugin system
|
|
183
|
-
- Cross-platform CLI
|
|
184
|
-
|
|
185
|
-
Spec complete. Project archived.
|
|
186
|
-
|
|
187
|
-
---
|
|
188
|
-
🤖 Auto-closed by SpecWeave
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
### 4. GitHub Project → Spec (Import)
|
|
192
|
-
|
|
193
|
-
**Use Case**: Import existing GitHub Projects as SpecWeave specs
|
|
194
|
-
|
|
195
|
-
**Command**: `sw-github:import-project <project-number>`
|
|
196
|
-
|
|
197
|
-
**Actions**:
|
|
198
|
-
1. Fetch project via GitHub GraphQL API
|
|
199
|
-
2. Create spec structure:
|
|
200
|
-
- Parse project title → spec title
|
|
201
|
-
- Parse project body → spec overview
|
|
202
|
-
- Map issues → user stories
|
|
203
|
-
- Map labels → priority
|
|
204
|
-
|
|
205
|
-
3. Generate spec.md with user stories and acceptance criteria
|
|
206
|
-
4. Link project to spec in metadata
|
|
207
|
-
|
|
208
|
-
---
|
|
209
|
-
|
|
210
|
-
## Configuration
|
|
211
|
-
|
|
212
|
-
Configure GitHub sync in `.specweave/config.json`:
|
|
213
|
-
|
|
214
|
-
```json
|
|
215
|
-
{
|
|
216
|
-
"sync": {
|
|
217
|
-
"enabled": true,
|
|
218
|
-
"preset": "bidirectional",
|
|
219
|
-
"activeProfile": "default",
|
|
220
|
-
"profiles": {
|
|
221
|
-
"default": {
|
|
222
|
-
"provider": "github",
|
|
223
|
-
"config": {
|
|
224
|
-
"owner": "myorg",
|
|
225
|
-
"repo": "myrepo",
|
|
226
|
-
"autoSyncSpecs": true,
|
|
227
|
-
"defaultLabels": ["specweave", "spec"]
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
**Credentials** (in `.env`, gitignored):
|
|
236
|
-
```bash
|
|
237
|
-
GITHUB_TOKEN=ghp_xxxxx
|
|
238
|
-
# Or just run: gh auth login (auto-detected)
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
---
|
|
242
|
-
|
|
243
|
-
## GitHub CLI Requirements
|
|
244
|
-
|
|
245
|
-
This skill requires GitHub CLI (`gh`) to be installed and authenticated:
|
|
246
|
-
|
|
247
|
-
```bash
|
|
248
|
-
# Install GitHub CLI
|
|
249
|
-
brew install gh # macOS
|
|
250
|
-
apt install gh # Ubuntu/Debian
|
|
251
|
-
choco install gh # Windows
|
|
252
|
-
|
|
253
|
-
# Authenticate
|
|
254
|
-
gh auth login
|
|
255
|
-
|
|
256
|
-
# Verify
|
|
257
|
-
gh auth status
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
---
|
|
261
|
-
|
|
262
|
-
## Manual Sync Operations
|
|
263
|
-
|
|
264
|
-
### Sync Spec to GitHub
|
|
265
|
-
|
|
266
|
-
```bash
|
|
267
|
-
sw-github:sync-spec spec-001
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
Creates or updates GitHub Project for spec-001.
|
|
271
|
-
|
|
272
|
-
### Sync All Specs
|
|
273
|
-
|
|
274
|
-
```bash
|
|
275
|
-
sw-github:sync-spec --all
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
Syncs all specs to GitHub Projects.
|
|
279
|
-
|
|
280
|
-
### Import Project
|
|
26
|
+
- The increment-based `sw-github:*` commands are the supported path. Run them
|
|
27
|
+
directly; this skill no longer carries its own workflow guidance (it was
|
|
28
|
+
contradictory — it pointed at a `sw-github:sync-spec` command that does not
|
|
29
|
+
exist and claimed increment-based sync was "removed" when it is the live flow).
|
|
30
|
+
- Setup and credentials are handled by `sw:sync-setup`. Configuration lives in
|
|
31
|
+
`.specweave/config.json` (`sync.*`); the GitHub token is read from
|
|
32
|
+
`GITHUB_TOKEN` / `GH_TOKEN` in `.env` (or `gh auth login`).
|
|
33
|
+
- For the deprecation policy, see
|
|
34
|
+
`.specweave/docs/internal/specs/skill-deprecation-policy.md`.
|
|
281
35
|
|
|
282
|
-
|
|
283
|
-
sw-github:import-project 123
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
Imports GitHub Project #123 as a SpecWeave spec.
|
|
287
|
-
|
|
288
|
-
### Check Status
|
|
289
|
-
|
|
290
|
-
```bash
|
|
291
|
-
sw-github:status spec-001
|
|
292
|
-
```
|
|
293
|
-
|
|
294
|
-
Shows sync status (project ID, last sync time, progress %).
|
|
295
|
-
|
|
296
|
-
---
|
|
297
|
-
|
|
298
|
-
## Workflow Integration
|
|
299
|
-
|
|
300
|
-
### Full Automated Workflow
|
|
301
|
-
|
|
302
|
-
```bash
|
|
303
|
-
# 1. Create spec (PM agent)
|
|
304
|
-
User: "Create spec for user authentication"
|
|
305
|
-
PM: Creates .specweave/docs/internal/specs/spec-005-user-auth.md
|
|
306
|
-
|
|
307
|
-
# 2. Auto-sync to GitHub (hook)
|
|
308
|
-
→ GitHub Project created automatically
|
|
309
|
-
→ Issues created for each user story
|
|
310
|
-
|
|
311
|
-
# 3. Implement increments
|
|
312
|
-
sw:increment "Add login flow"
|
|
313
|
-
→ Increment 0010 created (implements US-001, US-002)
|
|
314
|
-
|
|
315
|
-
# 4. Work on tasks
|
|
316
|
-
sw:do
|
|
317
|
-
→ Task completed
|
|
318
|
-
→ Hook fires
|
|
319
|
-
→ Spec updated (AC marked complete)
|
|
320
|
-
→ GitHub Project updated automatically
|
|
321
|
-
|
|
322
|
-
# 5. Complete spec
|
|
323
|
-
→ All user stories done
|
|
324
|
-
→ GitHub Project archived automatically
|
|
325
|
-
```
|
|
326
|
-
|
|
327
|
-
### Team Collaboration
|
|
328
|
-
|
|
329
|
-
**For Developers**:
|
|
330
|
-
- Work in SpecWeave specs locally
|
|
331
|
-
- Automatic GitHub Project updates keep team informed
|
|
332
|
-
- No manual project management needed
|
|
333
|
-
|
|
334
|
-
**For Project Managers**:
|
|
335
|
-
- View all specs as GitHub Projects
|
|
336
|
-
- Track progress in GitHub Projects UI
|
|
337
|
-
- Comment on issues to communicate with developers
|
|
338
|
-
|
|
339
|
-
**For Stakeholders**:
|
|
340
|
-
- See progress in familiar GitHub interface
|
|
341
|
-
- No need to understand SpecWeave structure
|
|
342
|
-
- Clear visibility into feature development status
|
|
343
|
-
|
|
344
|
-
---
|
|
345
|
-
|
|
346
|
-
## Conflict Resolution
|
|
347
|
-
|
|
348
|
-
**What if project and spec diverge?**
|
|
349
|
-
|
|
350
|
-
The spec is always the source of truth. GitHub Projects are a mirror for visibility.
|
|
351
|
-
|
|
352
|
-
**Sync conflicts** (rare):
|
|
353
|
-
1. Spec status conflicts with project state
|
|
354
|
-
2. Manual edits to project/issue body/title
|
|
355
|
-
|
|
356
|
-
**Resolution**:
|
|
357
|
-
- Run `sw-github:sync-spec spec-001 --force` to overwrite project from spec
|
|
358
|
-
- Or manually update spec metadata to match project
|
|
359
|
-
|
|
360
|
-
---
|
|
361
|
-
|
|
362
|
-
## Privacy & Security
|
|
363
|
-
|
|
364
|
-
**What gets synced?**
|
|
365
|
-
- ✅ Spec title, overview, progress
|
|
366
|
-
- ✅ User stories and acceptance criteria
|
|
367
|
-
- ✅ User story completion status
|
|
368
|
-
- ❌ Code diffs, file contents (never synced)
|
|
369
|
-
- ❌ Internal notes, sensitive data
|
|
370
|
-
|
|
371
|
-
**Security**:
|
|
372
|
-
- Uses GitHub token from environment (GITHUB_TOKEN or GH_TOKEN)
|
|
373
|
-
- Respects repository permissions (read/write)
|
|
374
|
-
- No data sent to third parties
|
|
375
|
-
|
|
376
|
-
---
|
|
377
|
-
|
|
378
|
-
## Benefits
|
|
379
|
-
|
|
380
|
-
**For SpecWeave Users**:
|
|
381
|
-
- ✅ No manual GitHub project management
|
|
382
|
-
- ✅ Automatic team visibility
|
|
383
|
-
- ✅ Single source of truth (spec docs)
|
|
384
|
-
- ✅ GitHub integration without leaving IDE
|
|
385
|
-
|
|
386
|
-
**For Teams**:
|
|
387
|
-
- ✅ Track SpecWeave work in GitHub Projects
|
|
388
|
-
- ✅ Use milestones, labels, assignees as usual
|
|
389
|
-
- ✅ Comment on issues to communicate with developers
|
|
390
|
-
- ✅ View progress in real-time
|
|
391
|
-
|
|
392
|
-
**For Organizations**:
|
|
393
|
-
- ✅ Unified project tracking across repos
|
|
394
|
-
- ✅ GitHub-native workflow (familiar to all)
|
|
395
|
-
- ✅ Audit trail (all syncs timestamped)
|
|
396
|
-
- ✅ Integration with GitHub Actions, webhooks
|
|
397
|
-
|
|
398
|
-
---
|
|
399
|
-
|
|
400
|
-
## Troubleshooting
|
|
401
|
-
|
|
402
|
-
**Project not created?**
|
|
403
|
-
- Check GitHub CLI: `gh auth status`
|
|
404
|
-
- Verify repo permissions (write access)
|
|
405
|
-
- Check config: `.specweave/config.json`
|
|
406
|
-
|
|
407
|
-
**Sync failing?**
|
|
408
|
-
- Check network connectivity
|
|
409
|
-
- Verify project still exists (not deleted)
|
|
410
|
-
- Check rate limits: `gh api rate_limit`
|
|
411
|
-
|
|
412
|
-
**Progress not updating?**
|
|
413
|
-
- Check `autoSyncSpecs: true` in config
|
|
414
|
-
- Verify hook execution: `.specweave/logs/hooks-debug.log`
|
|
415
|
-
- Manually sync: `sw-github:sync-spec spec-001`
|
|
416
|
-
|
|
417
|
-
---
|
|
418
|
-
|
|
419
|
-
## Advanced Usage
|
|
420
|
-
|
|
421
|
-
### Custom Project Templates
|
|
422
|
-
|
|
423
|
-
Create `.specweave/github/project-template.md`:
|
|
424
|
-
|
|
425
|
-
```markdown
|
|
426
|
-
# [{{spec.id.toUpperCase()}}] {{spec.title}}
|
|
427
|
-
|
|
428
|
-
{{spec.overview}}
|
|
429
|
-
|
|
430
|
-
## SpecWeave Details
|
|
431
|
-
|
|
432
|
-
- **Spec**: [spec.md]({{spec.url}})
|
|
433
|
-
- **Priority**: {{spec.priority}}
|
|
434
|
-
- **Feature Area**: {{spec.featureArea}}
|
|
435
|
-
|
|
436
|
-
## User Stories
|
|
437
|
-
|
|
438
|
-
{{spec.userStories.map(us => `- ${us.id}: ${us.title}`).join('\n')}}
|
|
439
|
-
```
|
|
440
|
-
|
|
441
|
-
### Selective Sync
|
|
442
|
-
|
|
443
|
-
Sync only specific specs:
|
|
444
|
-
|
|
445
|
-
```json
|
|
446
|
-
{
|
|
447
|
-
"sync": {
|
|
448
|
-
"profiles": {
|
|
449
|
-
"default": {
|
|
450
|
-
"provider": "github",
|
|
451
|
-
"config": {
|
|
452
|
-
"owner": "myorg",
|
|
453
|
-
"repo": "myrepo",
|
|
454
|
-
"syncSpecs": [
|
|
455
|
-
"spec-001-core-framework",
|
|
456
|
-
"spec-005-user-authentication"
|
|
457
|
-
]
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
```
|
|
464
|
-
|
|
465
|
-
### Multi-Repo Sync
|
|
466
|
-
|
|
467
|
-
For monorepos with multiple GitHub repositories, use multiple profiles:
|
|
468
|
-
|
|
469
|
-
```json
|
|
470
|
-
{
|
|
471
|
-
"sync": {
|
|
472
|
-
"profiles": {
|
|
473
|
-
"frontend": {
|
|
474
|
-
"provider": "github",
|
|
475
|
-
"config": {
|
|
476
|
-
"owner": "myorg",
|
|
477
|
-
"repo": "frontend",
|
|
478
|
-
"syncSpecs": ["spec-001-*", "spec-002-*"]
|
|
479
|
-
}
|
|
480
|
-
},
|
|
481
|
-
"backend": {
|
|
482
|
-
"provider": "github",
|
|
483
|
-
"config": {
|
|
484
|
-
"owner": "myorg",
|
|
485
|
-
"repo": "backend",
|
|
486
|
-
"syncSpecs": ["spec-003-*", "spec-004-*"]
|
|
487
|
-
}
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
|
-
```
|
|
493
|
-
|
|
494
|
-
---
|
|
495
|
-
|
|
496
|
-
## Projects V2 Integration (v3.0.0+)
|
|
497
|
-
|
|
498
|
-
### Enabling Projects V2
|
|
499
|
-
|
|
500
|
-
Add `projectV2Enabled: true` to your sync config:
|
|
501
|
-
|
|
502
|
-
```json
|
|
503
|
-
{
|
|
504
|
-
"sync": {
|
|
505
|
-
"profiles": {
|
|
506
|
-
"myproject": {
|
|
507
|
-
"provider": "github",
|
|
508
|
-
"config": {
|
|
509
|
-
"owner": "myorg",
|
|
510
|
-
"repo": "myrepo",
|
|
511
|
-
"projectV2Enabled": true,
|
|
512
|
-
"projectV2Number": 5
|
|
513
|
-
}
|
|
514
|
-
}
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
```
|
|
519
|
-
|
|
520
|
-
### What Happens with V2 Enabled
|
|
521
|
-
|
|
522
|
-
1. **Push sync** creates/updates GitHub issues (same as before)
|
|
523
|
-
2. **Issues are added to Projects V2 board** automatically
|
|
524
|
-
3. **Status field** is set based on user story status (planned/in-progress/completed)
|
|
525
|
-
4. **Priority field** is set based on user story priority (P1-P4)
|
|
526
|
-
|
|
527
|
-
### Custom Field Mappings
|
|
528
|
-
|
|
529
|
-
```json
|
|
530
|
-
{
|
|
531
|
-
"statusFieldMapping": {
|
|
532
|
-
"planned": "Todo",
|
|
533
|
-
"in-progress": "In Progress",
|
|
534
|
-
"completed": "Done"
|
|
535
|
-
},
|
|
536
|
-
"priorityFieldMapping": {
|
|
537
|
-
"P1": "Urgent",
|
|
538
|
-
"P2": "High",
|
|
539
|
-
"P3": "Medium",
|
|
540
|
-
"P4": "Low"
|
|
541
|
-
}
|
|
542
|
-
}
|
|
543
|
-
```
|
|
544
|
-
|
|
545
|
-
### Pull Sync (GitHub to Spec)
|
|
546
|
-
|
|
547
|
-
Pull sync fetches issue state and compares with spec ACs:
|
|
548
|
-
- AC checkbox toggles on GitHub are detected and applied to spec
|
|
549
|
-
- Issue close/reopen is detected as status change
|
|
550
|
-
- Conflicts are detected when both spec and GitHub changed the same field
|
|
551
|
-
|
|
552
|
-
### Batch Sync
|
|
553
|
-
|
|
554
|
-
Sync all specs at once:
|
|
555
|
-
- Discovers all `spec-*.md` files in `.specweave/docs/internal/specs/`
|
|
556
|
-
- Syncs each sequentially
|
|
557
|
-
- Reports summary with created/updated/failed counts
|
|
558
|
-
|
|
559
|
-
### Cross-Repo Sync
|
|
560
|
-
|
|
561
|
-
For distributed strategies, issues can be created in different repos:
|
|
562
|
-
- User stories specify target repos via `targetRepos` field
|
|
563
|
-
- Cross-references added: "Also tracked in: org/other-repo#XX"
|
|
564
|
-
- All cross-repo issues added to shared org-level Projects V2 board
|
|
565
|
-
|
|
566
|
-
---
|
|
567
|
-
|
|
568
|
-
## Related
|
|
569
|
-
|
|
570
|
-
- **github-issue-tracker**: DEPRECATED - use spec sync instead
|
|
571
|
-
- **Commands**: `sw-github:sync-spec`, `sw-github:import-project`, `sw-github:status`
|
|
572
|
-
- **Team Skills**: `sw:team-lead`, `sw:team-status`, `sw:team-merge`
|
|
573
|
-
|
|
574
|
-
---
|
|
36
|
+
## Removal
|
|
575
37
|
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
38
|
+
Scheduled for removal once the `sw-github:*` command help fully absorbs any
|
|
39
|
+
remaining setup notes. Until then this stub exists only to avoid contradictory
|
|
40
|
+
guidance; it is non-activating (`user-invokable: false`).
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"id": 1,
|
|
6
6
|
"name": "initial-github-sync-setup",
|
|
7
7
|
"prompt": "I just started using SpecWeave on my project at github.com/myorg/backend-api. I want to sync my specs to GitHub Projects so my team can track progress. How do I set up the GitHub integration? I need two-way sync.",
|
|
8
|
-
"expected_output": "Should guide through GitHub CLI authentication (gh auth login), explain the config.json setup for specweave-github plugin with repo
|
|
8
|
+
"expected_output": "Should guide through GitHub CLI authentication (gh auth login), explain the config.json setup for the specweave-github plugin with repo and sync settings, and mention the live sw-github:push / sw-github:pull / sw-github:sync commands for manual sync.",
|
|
9
9
|
"files": [],
|
|
10
10
|
"assertions": [
|
|
11
11
|
{
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
},
|
|
31
31
|
{
|
|
32
32
|
"id": "sync-command",
|
|
33
|
-
"text": "References
|
|
33
|
+
"text": "References a live sw-github:* command (sw-github:push, sw-github:pull, or sw-github:sync) for triggering manual sync operations",
|
|
34
34
|
"type": "boolean"
|
|
35
35
|
}
|
|
36
36
|
]
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
{
|
|
39
39
|
"id": 2,
|
|
40
40
|
"name": "sync-troubleshooting-permissions",
|
|
41
|
-
"prompt": "My GitHub sync keeps failing with a 403 error when I run sw-github:
|
|
41
|
+
"prompt": "My GitHub sync keeps failing with a 403 error when I run sw-github:push for increment 0003. I'm getting 'insufficient permissions' errors. I set up the token but something is wrong. How do I fix this?",
|
|
42
42
|
"expected_output": "Should diagnose GitHub permissions issues: check gh auth status, verify token scopes (needs repo and project access), check repository write access, suggest re-authenticating with correct scopes, and mention rate limit checking with gh api rate_limit.",
|
|
43
43
|
"files": [],
|
|
44
44
|
"assertions": [
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sw/handoff
|
|
3
|
+
description: Write a portable, secret-scrubbed work handoff doc so you can continue this work in any AI tool. Use when saying "handoff", "running out of tokens", "switch to Codex/OpenCode/Gemini/Cursor", "continue elsewhere", or "continue on another machine".
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
argument-hint: "[incrementId] [--reason ...] [--summary ...] [--next ...] [--gotcha ...] [--decision ...] [--inline]"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Work Handoff (Cross-Tool)
|
|
9
|
+
|
|
10
|
+
No AI coding tool can read another's transcript — each locks its session in a proprietary `.jsonl`, SQLite DB, or encrypted `.pb`. The only portable thing is a **self-contained handoff document**. This skill assembles SpecWeave's durable on-disk state (active increment, task/AC progress, decisions, ambient rules) plus a full diff of your uncommitted edits into one document that any other tool can read to pick up exactly where you left off.
|
|
11
|
+
|
|
12
|
+
This skill is the Claude Code surface of the cross-tool handoff feature. It is intentionally thin: the deterministic engine is the `specweave handoff` CLI subcommand. The same engine backs the PreCompact auto-handoff hook and the vskill `handoff` skill that carries this capability to other tools — so a handoff written here is continuable in Codex/OpenCode/Gemini/Cursor unchanged.
|
|
13
|
+
|
|
14
|
+
## When to use
|
|
15
|
+
|
|
16
|
+
- Low on subscription tokens — hand off and continue in another tool's free or separate quota.
|
|
17
|
+
- Want a durable artifact in case the session dies at context exhaustion.
|
|
18
|
+
- Moving to another machine — use `--inline` so the full doc travels inside the paste-prompt.
|
|
19
|
+
|
|
20
|
+
## Workflow
|
|
21
|
+
|
|
22
|
+
1. **Run the CLI**, forwarding any short context the agent can supply cheaply:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
specweave handoff [incrementId] [--reason ...] [--summary ...] [--next ...] [--gotcha ...] [--decision ...] [--inline]
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
- No `incrementId` + exactly one active increment → it is used automatically.
|
|
29
|
+
- No active increment → a git + short-interview handoff is written (still portable).
|
|
30
|
+
- 2+ active increments + no `incrementId` → CLI errors listing candidate ids; re-run with the chosen id.
|
|
31
|
+
|
|
32
|
+
2. **Surface the CLI output verbatim, in order** (do not reorder or paraphrase):
|
|
33
|
+
1. absolute doc path as plain text (first), 2. clickable markdown link, 3. `.diff` path,
|
|
34
|
+
4. fenced copy-paste resume prompt, 5. per-tool "find your source session" tips.
|
|
35
|
+
|
|
36
|
+
3. **Respect the safety defaults**: the doc + diff are secret-scrubbed and gitignored by default; scrubbing is heuristic (review before sharing); nothing is committed.
|
|
37
|
+
|
|
38
|
+
## Doc format (single source of truth)
|
|
39
|
+
|
|
40
|
+
The doc is rendered by `handoff-doc-format.ts` and has these sections, in this order, ending with the `Doc format v1` footer marker:
|
|
41
|
+
|
|
42
|
+
1. **Where I Left Off** — reason, summary, active increment id + status, current/next task.
|
|
43
|
+
2. **Done / Pending** — task counts + %, AC counts, AC/task drift from `acSyncEvents`.
|
|
44
|
+
3. **Key Decisions & Gotchas** — decisions from `plan.md` + agent-supplied, plus ambient rules (test mode, coverage target, WIP limit) from `config.json`.
|
|
45
|
+
4. **Files Touched** — `git status --porcelain` + `git diff --stat` inline; the full uncommitted diff is in the sibling `.diff` file; an UNCOMMITTED warning when the tree is dirty.
|
|
46
|
+
5. **Exact Next Steps** — the explicit next step or the next pending task.
|
|
47
|
+
6. **How To Resume** — per-tool resume matrix (Claude `claude -r <uuid>`, Codex `codex resume <uuid>` / `--last`, OpenCode `opencode -s <id>`, Gemini `/chat resume <tag>`, Antigravity Agent Manager, Aider `aider --restore-chat-history`) + the instruction to STOP and ask for a paste if the doc path is missing on the current machine.
|
|
48
|
+
7. **Redaction** — per-pattern secret-scrub counts + the heuristic disclaimer.
|
|
49
|
+
|
|
50
|
+
## Doc placement
|
|
51
|
+
|
|
52
|
+
- **SpecWeave**: `.specweave/increments/{id}/reports/handoff.md` + a stable copy at `.specweave/state/handoff-latest.md` (with `handoff-latest.diff`).
|
|
53
|
+
- **Non-SpecWeave**: `.handoff/HANDOFF.md` + `.handoff/handoff.diff`, with a self-created `.handoff/.gitignore` containing `*`.
|
|
54
|
+
|
|
55
|
+
## Related
|
|
56
|
+
|
|
57
|
+
- `sw:progress` — status without writing a handoff.
|
|
58
|
+
- vskill `handoff` skill — the self-contained cross-tool version for Codex/OpenCode/Gemini/Cursor (no SpecWeave required).
|
|
59
|
+
- `docs/guides/cross-tool-handoff.md` — the cross-tool matrix and full reference.
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"handoff-context.d.ts","sourceRoot":"","sources":["../../../../src/core/session/handoff-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,gCAAgC;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gCAAgC;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wCAAwC;IACxC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8CAA8C;IAC9C,eAAe,EAAE,KAAK,EAAE,CAAC;IACzB,kDAAkD;IAClD,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAgRD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,qBAAqB,GAC7B,cAAc,CAwBhB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAiExE"}
|