@epiccontext/mcp 0.1.17 → 0.1.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/files.d.ts.map +1 -1
- package/dist/cli/files.js +727 -0
- package/dist/cli/files.js.map +1 -1
- package/package.json +1 -1
package/dist/cli/files.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/cli/files.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,EAAE,CAmCjE;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,QAAQ,EAAE,EACjB,OAAO,GAAE,YAAiB,GACzB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAsC9D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/cli/files.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,EAAE,CAmCjE;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,QAAQ,EAAE,EACjB,OAAO,GAAE,YAAiB,GACzB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAsC9D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAy3C7D;AA4BD;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAO5D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAOpD"}
|
package/dist/cli/files.js
CHANGED
|
@@ -203,6 +203,9 @@ Your content goes here after the frontmatter...
|
|
|
203
203
|
|
|
204
204
|
### technical/
|
|
205
205
|
- \`text\` - Architecture, stack overview
|
|
206
|
+
- \`frontend_stack\` - Frontend technology choices
|
|
207
|
+
- \`backend_stack\` - Backend technology choices
|
|
208
|
+
- \`architecture_diagram\` - C4 model system architecture diagrams
|
|
206
209
|
- \`integration\` - Third-party integrations
|
|
207
210
|
- \`constraint\` - Technical constraints
|
|
208
211
|
|
|
@@ -617,6 +620,730 @@ CORRECT: Always specify link type
|
|
|
617
620
|
{ "id": "link-1", "sourceId": "a", "targetId": "b", "type": "action" }
|
|
618
621
|
\`\`\`
|
|
619
622
|
|
|
623
|
+
### Architecture Diagram Block (C4 Model)
|
|
624
|
+
|
|
625
|
+
Architecture diagram blocks document system architecture visually using the C4 model (Context, Container, Component). They use embedded JSON in a \`sync:data\` block with \`elements\` and \`connections\`.
|
|
626
|
+
|
|
627
|
+
#### Purpose
|
|
628
|
+
- Visualize system architecture at different abstraction levels
|
|
629
|
+
- Show how systems, containers, and components interact
|
|
630
|
+
- Document communication patterns and technologies
|
|
631
|
+
- Provide clear diagrams for different audiences (technical, leadership)
|
|
632
|
+
|
|
633
|
+
#### C4 Model Levels
|
|
634
|
+
|
|
635
|
+
| Level | Purpose | Shows | Audience |
|
|
636
|
+
|-------|---------|-------|----------|
|
|
637
|
+
| **Context** | Big picture | Systems + external actors | Everyone |
|
|
638
|
+
| **Container** | Applications & data stores | Apps, databases, services within your system | Technical + Leadership |
|
|
639
|
+
| **Component** | Inside a container | Components, modules, classes | Developers, Architects |
|
|
640
|
+
|
|
641
|
+
#### Data Structure
|
|
642
|
+
|
|
643
|
+
The sync:data block contains:
|
|
644
|
+
|
|
645
|
+
\`\`\`json
|
|
646
|
+
{
|
|
647
|
+
"elements": [ ... ], // Systems, containers, components, people
|
|
648
|
+
"connections": [ ... ], // Communication paths between elements
|
|
649
|
+
"legend": [ ... ] // Optional color legend
|
|
650
|
+
}
|
|
651
|
+
\`\`\`
|
|
652
|
+
|
|
653
|
+
#### Element Structure (ArchitectureElement)
|
|
654
|
+
|
|
655
|
+
| Property | Required | Description |
|
|
656
|
+
|----------|----------|-------------|
|
|
657
|
+
| \`id\` | Yes | Unique identifier (kebab-case, e.g., "web-app") |
|
|
658
|
+
| \`label\` | Yes | Display name shown in the diagram |
|
|
659
|
+
| \`type\` | Yes | Element type (see types below) |
|
|
660
|
+
| \`description\` | No | Brief description of what this element does |
|
|
661
|
+
| \`technology\` | No | Technology stack (e.g., "React", "Node.js", "PostgreSQL") |
|
|
662
|
+
| \`isExternal\` | No | True if outside your system boundary |
|
|
663
|
+
| \`position\` | Yes | Visual position: \`{ "x": number, "y": number }\` |
|
|
664
|
+
| \`color\` | No | Override default color (hex code) |
|
|
665
|
+
| \`icon\` | No | Lucide icon name for visual representation |
|
|
666
|
+
|
|
667
|
+
#### Element Types
|
|
668
|
+
|
|
669
|
+
| Type | Default Color | Description | Visual |
|
|
670
|
+
|------|--------------|-------------|--------|
|
|
671
|
+
| \`system\` | #438DD5 (blue) | Software system (yours or external) | Large box |
|
|
672
|
+
| \`container\` | #438DD5 (blue) | Application, service, database | Medium box |
|
|
673
|
+
| \`component\` | #85BBF0 (light blue) | Module, class, or logical component | Small box |
|
|
674
|
+
| \`person\` | #08427B (dark blue) | User, actor, or role | Person shape |
|
|
675
|
+
| \`database\` | #438DD5 (blue) | Data store (SQL, NoSQL, file) | Cylinder |
|
|
676
|
+
| \`queue\` | #438DD5 (blue) | Message queue, event stream | Rounded box |
|
|
677
|
+
| \`external\` | #999999 (gray) | External system you don't control | Dashed box |
|
|
678
|
+
|
|
679
|
+
#### Connection Structure (ArchitectureConnection)
|
|
680
|
+
|
|
681
|
+
| Property | Required | Description |
|
|
682
|
+
|----------|----------|-------------|
|
|
683
|
+
| \`id\` | Yes | Unique ID (e.g., "conn-web-to-api") |
|
|
684
|
+
| \`sourceId\` | Yes | ID of the source element |
|
|
685
|
+
| \`targetId\` | Yes | ID of the target element |
|
|
686
|
+
| \`label\` | No | Description of what flows (e.g., "REST API", "Events") |
|
|
687
|
+
| \`communicationType\` | No | Type of communication (see below) |
|
|
688
|
+
| \`technology\` | No | Protocol or technology (e.g., "HTTPS", "gRPC", "WebSocket") |
|
|
689
|
+
| \`description\` | No | Additional details about the connection |
|
|
690
|
+
|
|
691
|
+
#### Communication Types
|
|
692
|
+
|
|
693
|
+
| Type | Arrow Style | Description |
|
|
694
|
+
|------|-------------|-------------|
|
|
695
|
+
| \`sync\` | Solid → | Synchronous request/response |
|
|
696
|
+
| \`async\` | Dashed → | Asynchronous messaging |
|
|
697
|
+
| \`read\` | Solid → (read) | Data read operation |
|
|
698
|
+
| \`write\` | Solid → (write) | Data write operation |
|
|
699
|
+
| \`bidirectional\` | ↔ | Two-way communication |
|
|
700
|
+
|
|
701
|
+
#### Complete Example
|
|
702
|
+
|
|
703
|
+
\`\`\`markdown
|
|
704
|
+
---
|
|
705
|
+
type: architecture_diagram
|
|
706
|
+
section: technical
|
|
707
|
+
key: system-context
|
|
708
|
+
name: System Context Diagram
|
|
709
|
+
status: draft
|
|
710
|
+
level: context
|
|
711
|
+
audience: non-technical
|
|
712
|
+
---
|
|
713
|
+
|
|
714
|
+
# System Context Diagram
|
|
715
|
+
|
|
716
|
+
High-level overview of how our application fits into the broader ecosystem.
|
|
717
|
+
|
|
718
|
+
## Description
|
|
719
|
+
This diagram shows our EpicContext application and how it interacts with external users and systems.
|
|
720
|
+
|
|
721
|
+
<!-- sync:data -->
|
|
722
|
+
\\\`\`\`json
|
|
723
|
+
{
|
|
724
|
+
"elements": [
|
|
725
|
+
{
|
|
726
|
+
"id": "user",
|
|
727
|
+
"label": "Product Team",
|
|
728
|
+
"type": "person",
|
|
729
|
+
"description": "Uses EpicContext to manage product documentation",
|
|
730
|
+
"position": { "x": 400, "y": 50 }
|
|
731
|
+
},
|
|
732
|
+
{
|
|
733
|
+
"id": "epiccontext",
|
|
734
|
+
"label": "EpicContext",
|
|
735
|
+
"type": "system",
|
|
736
|
+
"description": "SaaS platform for managing design context documentation",
|
|
737
|
+
"technology": "Next.js, Supabase",
|
|
738
|
+
"position": { "x": 400, "y": 250 }
|
|
739
|
+
},
|
|
740
|
+
{
|
|
741
|
+
"id": "ai-agents",
|
|
742
|
+
"label": "AI Coding Agents",
|
|
743
|
+
"type": "person",
|
|
744
|
+
"description": "Claude Code, Cursor, etc. that consume context",
|
|
745
|
+
"position": { "x": 700, "y": 50 }
|
|
746
|
+
},
|
|
747
|
+
{
|
|
748
|
+
"id": "supabase",
|
|
749
|
+
"label": "Supabase",
|
|
750
|
+
"type": "external",
|
|
751
|
+
"description": "Backend-as-a-Service for auth and database",
|
|
752
|
+
"technology": "PostgreSQL",
|
|
753
|
+
"isExternal": true,
|
|
754
|
+
"position": { "x": 400, "y": 450 }
|
|
755
|
+
},
|
|
756
|
+
{
|
|
757
|
+
"id": "clerk",
|
|
758
|
+
"label": "Clerk",
|
|
759
|
+
"type": "external",
|
|
760
|
+
"description": "Authentication provider",
|
|
761
|
+
"isExternal": true,
|
|
762
|
+
"position": { "x": 150, "y": 250 }
|
|
763
|
+
},
|
|
764
|
+
{
|
|
765
|
+
"id": "mcp-server",
|
|
766
|
+
"label": "MCP Server",
|
|
767
|
+
"type": "system",
|
|
768
|
+
"description": "Local server that syncs context to codebase",
|
|
769
|
+
"technology": "Node.js",
|
|
770
|
+
"position": { "x": 700, "y": 250 }
|
|
771
|
+
}
|
|
772
|
+
],
|
|
773
|
+
"connections": [
|
|
774
|
+
{
|
|
775
|
+
"id": "conn-user-to-app",
|
|
776
|
+
"sourceId": "user",
|
|
777
|
+
"targetId": "epiccontext",
|
|
778
|
+
"label": "Manages documentation",
|
|
779
|
+
"communicationType": "sync",
|
|
780
|
+
"technology": "HTTPS"
|
|
781
|
+
},
|
|
782
|
+
{
|
|
783
|
+
"id": "conn-app-to-supabase",
|
|
784
|
+
"sourceId": "epiccontext",
|
|
785
|
+
"targetId": "supabase",
|
|
786
|
+
"label": "Stores data",
|
|
787
|
+
"communicationType": "sync",
|
|
788
|
+
"technology": "PostgreSQL/REST"
|
|
789
|
+
},
|
|
790
|
+
{
|
|
791
|
+
"id": "conn-app-to-clerk",
|
|
792
|
+
"sourceId": "epiccontext",
|
|
793
|
+
"targetId": "clerk",
|
|
794
|
+
"label": "Authenticates users",
|
|
795
|
+
"communicationType": "sync",
|
|
796
|
+
"technology": "HTTPS"
|
|
797
|
+
},
|
|
798
|
+
{
|
|
799
|
+
"id": "conn-app-to-mcp",
|
|
800
|
+
"sourceId": "epiccontext",
|
|
801
|
+
"targetId": "mcp-server",
|
|
802
|
+
"label": "Syncs via API",
|
|
803
|
+
"communicationType": "sync",
|
|
804
|
+
"technology": "REST API"
|
|
805
|
+
},
|
|
806
|
+
{
|
|
807
|
+
"id": "conn-ai-to-mcp",
|
|
808
|
+
"sourceId": "ai-agents",
|
|
809
|
+
"targetId": "mcp-server",
|
|
810
|
+
"label": "Reads context",
|
|
811
|
+
"communicationType": "read",
|
|
812
|
+
"technology": "MCP Protocol"
|
|
813
|
+
}
|
|
814
|
+
],
|
|
815
|
+
"legend": [
|
|
816
|
+
{ "color": "#08427B", "label": "Person/User" },
|
|
817
|
+
{ "color": "#438DD5", "label": "Our System" },
|
|
818
|
+
{ "color": "#999999", "label": "External System" }
|
|
819
|
+
]
|
|
820
|
+
}
|
|
821
|
+
\\\`\`\`
|
|
822
|
+
<!-- /sync:data -->
|
|
823
|
+
\`\`\`
|
|
824
|
+
|
|
825
|
+
#### Container Level Example
|
|
826
|
+
|
|
827
|
+
\`\`\`markdown
|
|
828
|
+
---
|
|
829
|
+
type: architecture_diagram
|
|
830
|
+
section: technical
|
|
831
|
+
key: container-diagram
|
|
832
|
+
name: Container Diagram
|
|
833
|
+
status: draft
|
|
834
|
+
level: container
|
|
835
|
+
audience: technical
|
|
836
|
+
---
|
|
837
|
+
|
|
838
|
+
# Container Diagram
|
|
839
|
+
|
|
840
|
+
Applications and data stores that make up EpicContext.
|
|
841
|
+
|
|
842
|
+
<!-- sync:data -->
|
|
843
|
+
\\\`\`\`json
|
|
844
|
+
{
|
|
845
|
+
"elements": [
|
|
846
|
+
{
|
|
847
|
+
"id": "web-app",
|
|
848
|
+
"label": "Web Application",
|
|
849
|
+
"type": "container",
|
|
850
|
+
"description": "SPA for managing context",
|
|
851
|
+
"technology": "Next.js 14, React, TypeScript",
|
|
852
|
+
"position": { "x": 200, "y": 100 }
|
|
853
|
+
},
|
|
854
|
+
{
|
|
855
|
+
"id": "api",
|
|
856
|
+
"label": "API Routes",
|
|
857
|
+
"type": "container",
|
|
858
|
+
"description": "Server-side API endpoints",
|
|
859
|
+
"technology": "Next.js API Routes",
|
|
860
|
+
"position": { "x": 500, "y": 100 }
|
|
861
|
+
},
|
|
862
|
+
{
|
|
863
|
+
"id": "database",
|
|
864
|
+
"label": "Database",
|
|
865
|
+
"type": "database",
|
|
866
|
+
"description": "Stores all application data",
|
|
867
|
+
"technology": "PostgreSQL (Supabase)",
|
|
868
|
+
"position": { "x": 500, "y": 300 }
|
|
869
|
+
},
|
|
870
|
+
{
|
|
871
|
+
"id": "file-storage",
|
|
872
|
+
"label": "File Storage",
|
|
873
|
+
"type": "database",
|
|
874
|
+
"description": "Stores uploaded assets",
|
|
875
|
+
"technology": "Supabase Storage",
|
|
876
|
+
"position": { "x": 200, "y": 300 }
|
|
877
|
+
},
|
|
878
|
+
{
|
|
879
|
+
"id": "mcp-package",
|
|
880
|
+
"label": "MCP Package",
|
|
881
|
+
"type": "container",
|
|
882
|
+
"description": "NPM package for local sync",
|
|
883
|
+
"technology": "Node.js, TypeScript",
|
|
884
|
+
"position": { "x": 750, "y": 200 }
|
|
885
|
+
}
|
|
886
|
+
],
|
|
887
|
+
"connections": [
|
|
888
|
+
{
|
|
889
|
+
"id": "conn-web-to-api",
|
|
890
|
+
"sourceId": "web-app",
|
|
891
|
+
"targetId": "api",
|
|
892
|
+
"label": "API calls",
|
|
893
|
+
"communicationType": "sync",
|
|
894
|
+
"technology": "HTTPS/JSON"
|
|
895
|
+
},
|
|
896
|
+
{
|
|
897
|
+
"id": "conn-api-to-db",
|
|
898
|
+
"sourceId": "api",
|
|
899
|
+
"targetId": "database",
|
|
900
|
+
"label": "Queries",
|
|
901
|
+
"communicationType": "bidirectional",
|
|
902
|
+
"technology": "Supabase Client"
|
|
903
|
+
},
|
|
904
|
+
{
|
|
905
|
+
"id": "conn-web-to-storage",
|
|
906
|
+
"sourceId": "web-app",
|
|
907
|
+
"targetId": "file-storage",
|
|
908
|
+
"label": "Uploads/Downloads",
|
|
909
|
+
"communicationType": "bidirectional",
|
|
910
|
+
"technology": "Supabase Storage API"
|
|
911
|
+
},
|
|
912
|
+
{
|
|
913
|
+
"id": "conn-mcp-to-api",
|
|
914
|
+
"sourceId": "mcp-package",
|
|
915
|
+
"targetId": "api",
|
|
916
|
+
"label": "Syncs context",
|
|
917
|
+
"communicationType": "sync",
|
|
918
|
+
"technology": "REST API"
|
|
919
|
+
}
|
|
920
|
+
]
|
|
921
|
+
}
|
|
922
|
+
\\\`\`\`
|
|
923
|
+
<!-- /sync:data -->
|
|
924
|
+
\`\`\`
|
|
925
|
+
|
|
926
|
+
#### Best Practices
|
|
927
|
+
|
|
928
|
+
1. **Choose the right level:**
|
|
929
|
+
- Start with Context for stakeholder communication
|
|
930
|
+
- Use Container for development planning
|
|
931
|
+
- Use Component for detailed design of complex containers
|
|
932
|
+
|
|
933
|
+
2. **Position elements logically:**
|
|
934
|
+
- Users/actors at top
|
|
935
|
+
- Your system in the middle
|
|
936
|
+
- External dependencies at bottom or sides
|
|
937
|
+
- Space elements ~200-300px apart
|
|
938
|
+
|
|
939
|
+
3. **Label connections clearly:**
|
|
940
|
+
- Use verbs: "Reads data", "Sends events", "Authenticates"
|
|
941
|
+
- Include technology when relevant: "REST API", "gRPC", "WebSocket"
|
|
942
|
+
- Keep labels concise but informative
|
|
943
|
+
|
|
944
|
+
4. **Use consistent colors:**
|
|
945
|
+
- Blue (#438DD5) for your internal systems
|
|
946
|
+
- Gray (#999999) for external systems
|
|
947
|
+
- Dark blue (#08427B) for people/users
|
|
948
|
+
- Add legend for custom colors
|
|
949
|
+
|
|
950
|
+
5. **Include technology details:**
|
|
951
|
+
- For Container level: framework, language, runtime
|
|
952
|
+
- For connections: protocol, message format
|
|
953
|
+
- Helps developers understand the stack
|
|
954
|
+
|
|
955
|
+
6. **Keep diagrams focused:**
|
|
956
|
+
- Context: 3-6 systems maximum
|
|
957
|
+
- Container: 5-10 containers maximum
|
|
958
|
+
- Component: 5-15 components maximum
|
|
959
|
+
- Create multiple diagrams if needed
|
|
960
|
+
|
|
961
|
+
#### Common Mistakes
|
|
962
|
+
|
|
963
|
+
WRONG: Missing positions
|
|
964
|
+
\`\`\`json
|
|
965
|
+
{ "id": "api", "label": "API", "type": "container" }
|
|
966
|
+
\`\`\`
|
|
967
|
+
|
|
968
|
+
CORRECT: Always include positions
|
|
969
|
+
\`\`\`json
|
|
970
|
+
{ "id": "api", "label": "API", "type": "container", "position": { "x": 400, "y": 200 } }
|
|
971
|
+
\`\`\`
|
|
972
|
+
|
|
973
|
+
WRONG: Vague connection labels
|
|
974
|
+
\`\`\`json
|
|
975
|
+
{ "id": "conn-1", "sourceId": "a", "targetId": "b", "label": "uses" }
|
|
976
|
+
\`\`\`
|
|
977
|
+
|
|
978
|
+
CORRECT: Specific, actionable labels
|
|
979
|
+
\`\`\`json
|
|
980
|
+
{ "id": "conn-1", "sourceId": "a", "targetId": "b", "label": "Fetches user data", "technology": "REST API" }
|
|
981
|
+
\`\`\`
|
|
982
|
+
|
|
983
|
+
WRONG: Too many elements on one diagram
|
|
984
|
+
Create separate diagrams for different aspects or zoom levels.
|
|
985
|
+
|
|
986
|
+
CORRECT: Focused diagrams
|
|
987
|
+
- One Context diagram for the big picture
|
|
988
|
+
- Separate Container diagrams per major system
|
|
989
|
+
- Component diagrams only for complex containers
|
|
990
|
+
|
|
991
|
+
### Development Section Blocks (Epic → Story → Task)
|
|
992
|
+
|
|
993
|
+
The development section uses a hierarchical structure to plan and track work. This creates a clear flow from high-level initiatives down to specific implementation tasks.
|
|
994
|
+
|
|
995
|
+
#### Hierarchy Flow
|
|
996
|
+
|
|
997
|
+
\`\`\`
|
|
998
|
+
Epic (Large initiative)
|
|
999
|
+
└── User Story (User-facing feature)
|
|
1000
|
+
└── Task / Agent Plan (Technical implementation)
|
|
1001
|
+
\`\`\`
|
|
1002
|
+
|
|
1003
|
+
**How AI/Developers Should Use This:**
|
|
1004
|
+
1. **Product Owner/User** creates Epics for major initiatives
|
|
1005
|
+
2. **Product Owner/User** breaks Epics into User Stories
|
|
1006
|
+
3. **AI Agent/Developer** reads Stories and creates Tasks with implementation plans
|
|
1007
|
+
4. **AI Agent/Developer** executes Tasks and updates outcomes
|
|
1008
|
+
|
|
1009
|
+
---
|
|
1010
|
+
|
|
1011
|
+
#### Epic Block
|
|
1012
|
+
|
|
1013
|
+
An Epic represents a large body of work that delivers significant value. It groups related User Stories.
|
|
1014
|
+
|
|
1015
|
+
**Required Fields:**
|
|
1016
|
+
- \`summary\` - One-line description
|
|
1017
|
+
- \`status\` - todo, in_progress, done
|
|
1018
|
+
|
|
1019
|
+
**Key Fields:**
|
|
1020
|
+
- \`description\` - Detailed explanation
|
|
1021
|
+
- \`priority\` - highest, high, medium, low, lowest
|
|
1022
|
+
- \`story_refs\` - Links to child User Stories
|
|
1023
|
+
- \`impact_score\` / \`effort_score\` - 1-5 scale for prioritization
|
|
1024
|
+
- \`start_date\` / \`due_date\` - Timeline
|
|
1025
|
+
- \`labels\` - Comma-separated tags
|
|
1026
|
+
|
|
1027
|
+
**Example:**
|
|
1028
|
+
\`\`\`markdown
|
|
1029
|
+
---
|
|
1030
|
+
type: epic
|
|
1031
|
+
section: development
|
|
1032
|
+
key: user-authentication
|
|
1033
|
+
name: User Authentication System
|
|
1034
|
+
status: draft
|
|
1035
|
+
priority: high
|
|
1036
|
+
start_date: 2025-01-15
|
|
1037
|
+
due_date: 2025-02-28
|
|
1038
|
+
labels: security, mvp, phase-1
|
|
1039
|
+
story_refs:
|
|
1040
|
+
- email-login
|
|
1041
|
+
- oauth-integration
|
|
1042
|
+
- password-reset
|
|
1043
|
+
---
|
|
1044
|
+
|
|
1045
|
+
# User Authentication System
|
|
1046
|
+
|
|
1047
|
+
Implement a complete authentication system allowing users to securely access their accounts.
|
|
1048
|
+
|
|
1049
|
+
## Summary
|
|
1050
|
+
Build secure user authentication with email/password and OAuth support.
|
|
1051
|
+
|
|
1052
|
+
## Description
|
|
1053
|
+
This epic covers all authentication-related features including registration, login, logout, password management, and third-party OAuth integration. The goal is to provide a frictionless yet secure authentication experience.
|
|
1054
|
+
|
|
1055
|
+
### Goals
|
|
1056
|
+
- Enable secure user registration with email verification
|
|
1057
|
+
- Support login via email/password and OAuth (Google, GitHub)
|
|
1058
|
+
- Implement password reset flow with secure tokens
|
|
1059
|
+
- Add session management with JWT
|
|
1060
|
+
|
|
1061
|
+
### Success Criteria
|
|
1062
|
+
- Users can create accounts and verify email
|
|
1063
|
+
- Login works with email/password and OAuth providers
|
|
1064
|
+
- Password reset emails arrive within 30 seconds
|
|
1065
|
+
- Sessions expire after 24 hours of inactivity
|
|
1066
|
+
|
|
1067
|
+
### Out of Scope
|
|
1068
|
+
- Two-factor authentication (planned for Phase 2)
|
|
1069
|
+
- Social login beyond Google/GitHub
|
|
1070
|
+
\`\`\`
|
|
1071
|
+
|
|
1072
|
+
---
|
|
1073
|
+
|
|
1074
|
+
#### User Story Block
|
|
1075
|
+
|
|
1076
|
+
A User Story describes a feature from the user's perspective. It belongs to an Epic and can have Tasks.
|
|
1077
|
+
|
|
1078
|
+
**Required Fields:**
|
|
1079
|
+
- \`summary\` - Brief description
|
|
1080
|
+
- \`status\` - todo, in_progress, in_review, done
|
|
1081
|
+
|
|
1082
|
+
**Key Fields:**
|
|
1083
|
+
- \`user_story\` - "As a [role], I want [goal], so that [benefit]" format
|
|
1084
|
+
- \`acceptance_criteria\` - Testable conditions (Given/When/Then)
|
|
1085
|
+
- \`epic_ref\` - Link to parent Epic
|
|
1086
|
+
- \`story_points\` - 1, 2, 3, 5, 8, 13, 21 (Fibonacci)
|
|
1087
|
+
- \`priority\` - highest, high, medium, low, lowest
|
|
1088
|
+
- \`impact_score\` / \`effort_score\` - 1-5 scale
|
|
1089
|
+
- \`sprint\` - Sprint assignment
|
|
1090
|
+
|
|
1091
|
+
**Example:**
|
|
1092
|
+
\`\`\`markdown
|
|
1093
|
+
---
|
|
1094
|
+
type: user_story
|
|
1095
|
+
section: development
|
|
1096
|
+
key: email-login
|
|
1097
|
+
name: Email Login
|
|
1098
|
+
status: draft
|
|
1099
|
+
priority: high
|
|
1100
|
+
story_points: 5
|
|
1101
|
+
impact_score: 5
|
|
1102
|
+
effort_score: 3
|
|
1103
|
+
epic_ref: user-authentication
|
|
1104
|
+
sprint: Sprint 1
|
|
1105
|
+
---
|
|
1106
|
+
|
|
1107
|
+
# Email Login
|
|
1108
|
+
|
|
1109
|
+
Allow users to securely log in with their email and password.
|
|
1110
|
+
|
|
1111
|
+
## Summary
|
|
1112
|
+
Implement email/password authentication with proper security measures.
|
|
1113
|
+
|
|
1114
|
+
## User Story
|
|
1115
|
+
As a registered user, I want to log in with my email and password, so that I can access my account securely and quickly.
|
|
1116
|
+
|
|
1117
|
+
## Description
|
|
1118
|
+
Users need a fast and secure way to access their accounts. The login form should validate input, show helpful error messages, and redirect to the dashboard on success.
|
|
1119
|
+
|
|
1120
|
+
## Acceptance Criteria
|
|
1121
|
+
|
|
1122
|
+
### Scenario: Successful login
|
|
1123
|
+
- Given I am on the login page
|
|
1124
|
+
- When I enter a valid email and correct password
|
|
1125
|
+
- Then I am redirected to the dashboard
|
|
1126
|
+
- And I see a welcome message with my name
|
|
1127
|
+
|
|
1128
|
+
### Scenario: Invalid credentials
|
|
1129
|
+
- Given I am on the login page
|
|
1130
|
+
- When I enter an invalid email or wrong password
|
|
1131
|
+
- Then I see an error message "Invalid email or password"
|
|
1132
|
+
- And I remain on the login page
|
|
1133
|
+
- And the password field is cleared
|
|
1134
|
+
|
|
1135
|
+
### Scenario: Rate limiting
|
|
1136
|
+
- Given I have failed login 5 times in 5 minutes
|
|
1137
|
+
- When I try to login again
|
|
1138
|
+
- Then I see "Too many attempts. Please try again in 15 minutes"
|
|
1139
|
+
|
|
1140
|
+
## Technical Notes
|
|
1141
|
+
- Use bcrypt for password hashing (cost factor 12)
|
|
1142
|
+
- Implement rate limiting: 5 attempts per 5 minutes per IP
|
|
1143
|
+
- Generate JWT with 24h expiry
|
|
1144
|
+
- Store refresh token in httpOnly cookie
|
|
1145
|
+
\`\`\`
|
|
1146
|
+
|
|
1147
|
+
---
|
|
1148
|
+
|
|
1149
|
+
#### Task / Agent Plan Block
|
|
1150
|
+
|
|
1151
|
+
A Task contains the technical implementation plan. AI coding agents (Claude Code, Cursor, etc.) should create Tasks when planning work.
|
|
1152
|
+
|
|
1153
|
+
**Required Fields:**
|
|
1154
|
+
- \`description\` - What needs to be done
|
|
1155
|
+
- \`status\` - planned, todo, in_progress, in_review, done, abandoned
|
|
1156
|
+
|
|
1157
|
+
**Key Fields:**
|
|
1158
|
+
- \`story_ref\` - Link to parent User Story
|
|
1159
|
+
- \`plan_steps\` - Step-by-step implementation plan
|
|
1160
|
+
- \`agent_source\` - manual, claude_code, cursor, copilot, windsurf, aider, other_ai
|
|
1161
|
+
- \`files_affected\` - List of files to create/modify
|
|
1162
|
+
- \`codebase_context\` - Relevant architecture notes
|
|
1163
|
+
- \`technical_notes\` - Implementation details
|
|
1164
|
+
- \`dependencies\` - Prerequisites or packages needed
|
|
1165
|
+
- \`estimated_hours\` - Time estimate
|
|
1166
|
+
- \`outcome\` - Results after completion
|
|
1167
|
+
|
|
1168
|
+
**Example (AI Agent Plan):**
|
|
1169
|
+
\`\`\`markdown
|
|
1170
|
+
---
|
|
1171
|
+
type: task
|
|
1172
|
+
section: development
|
|
1173
|
+
key: implement-login-api
|
|
1174
|
+
name: Implement Login API Endpoint
|
|
1175
|
+
status: planned
|
|
1176
|
+
priority: high
|
|
1177
|
+
agent_source: claude_code
|
|
1178
|
+
story_ref: email-login
|
|
1179
|
+
estimated_hours: 4
|
|
1180
|
+
---
|
|
1181
|
+
|
|
1182
|
+
# Implement Login API Endpoint
|
|
1183
|
+
|
|
1184
|
+
Create the POST /api/auth/login endpoint that validates credentials and returns JWT tokens.
|
|
1185
|
+
|
|
1186
|
+
## Description
|
|
1187
|
+
Implement the login API endpoint with proper validation, rate limiting, and token generation.
|
|
1188
|
+
|
|
1189
|
+
## Implementation Plan
|
|
1190
|
+
|
|
1191
|
+
### Step 1: Create Login Route Handler
|
|
1192
|
+
Create \`app/api/auth/login/route.ts\` with POST handler:
|
|
1193
|
+
- Accept email and password in request body
|
|
1194
|
+
- Validate input format using zod schema
|
|
1195
|
+
- Return 400 for invalid input with specific error messages
|
|
1196
|
+
|
|
1197
|
+
### Step 2: Implement User Lookup
|
|
1198
|
+
Query the users table by email:
|
|
1199
|
+
- Use Supabase client with service role for server-side
|
|
1200
|
+
- Return generic "Invalid credentials" to prevent email enumeration
|
|
1201
|
+
- Handle case-insensitive email matching
|
|
1202
|
+
|
|
1203
|
+
### Step 3: Password Verification
|
|
1204
|
+
Compare provided password with stored hash:
|
|
1205
|
+
- Use bcrypt.compare() for timing-safe comparison
|
|
1206
|
+
- Log failed attempts for security monitoring
|
|
1207
|
+
- Increment rate limit counter on failure
|
|
1208
|
+
|
|
1209
|
+
### Step 4: Generate JWT Tokens
|
|
1210
|
+
On successful authentication:
|
|
1211
|
+
- Generate access token (24h expiry) with user ID and email
|
|
1212
|
+
- Generate refresh token (7d expiry) stored in httpOnly cookie
|
|
1213
|
+
- Include minimal claims to reduce token size
|
|
1214
|
+
|
|
1215
|
+
### Step 5: Implement Rate Limiting
|
|
1216
|
+
Add rate limiting middleware:
|
|
1217
|
+
- Use Redis or in-memory store for attempt tracking
|
|
1218
|
+
- Key by IP address + email combination
|
|
1219
|
+
- Block after 5 failed attempts for 15 minutes
|
|
1220
|
+
- Return 429 with Retry-After header
|
|
1221
|
+
|
|
1222
|
+
### Step 6: Add Tests
|
|
1223
|
+
Create \`app/api/auth/login/route.test.ts\`:
|
|
1224
|
+
- Test successful login returns tokens
|
|
1225
|
+
- Test invalid email format returns 400
|
|
1226
|
+
- Test wrong password returns 401
|
|
1227
|
+
- Test rate limiting blocks after 5 attempts
|
|
1228
|
+
|
|
1229
|
+
## Files Affected
|
|
1230
|
+
- \`app/api/auth/login/route.ts\` (create)
|
|
1231
|
+
- \`lib/auth/jwt.ts\` (create)
|
|
1232
|
+
- \`lib/auth/password.ts\` (create)
|
|
1233
|
+
- \`lib/middleware/rate-limit.ts\` (create)
|
|
1234
|
+
- \`app/api/auth/login/route.test.ts\` (create)
|
|
1235
|
+
|
|
1236
|
+
## Codebase Context
|
|
1237
|
+
- Using Next.js 14 App Router
|
|
1238
|
+
- Supabase for database and auth
|
|
1239
|
+
- JWT library: jose
|
|
1240
|
+
- Password hashing: bcrypt
|
|
1241
|
+
- Validation: zod
|
|
1242
|
+
|
|
1243
|
+
## Dependencies
|
|
1244
|
+
- jose (JWT handling)
|
|
1245
|
+
- bcrypt (password hashing)
|
|
1246
|
+
- zod (validation)
|
|
1247
|
+
|
|
1248
|
+
## Technical Notes
|
|
1249
|
+
- Follow existing API patterns in \`app/api/\` folder
|
|
1250
|
+
- Use \`@/lib/supabase/server\` for database access
|
|
1251
|
+
- Error responses should match the ErrorResponse type in \`types/api.ts\`
|
|
1252
|
+
\`\`\`
|
|
1253
|
+
|
|
1254
|
+
---
|
|
1255
|
+
|
|
1256
|
+
#### Roadmap Block
|
|
1257
|
+
|
|
1258
|
+
A Roadmap provides a timeline view of Epics across time periods (quarters, months, sprints).
|
|
1259
|
+
|
|
1260
|
+
**Key Fields:**
|
|
1261
|
+
- \`description\` - Purpose of this roadmap
|
|
1262
|
+
- \`timeline\` - Visual timeline data with columns and epic placements
|
|
1263
|
+
- \`notes\` - Additional context, risks, assumptions
|
|
1264
|
+
|
|
1265
|
+
**Timeline Structure:**
|
|
1266
|
+
\`\`\`json
|
|
1267
|
+
{
|
|
1268
|
+
"columns": [
|
|
1269
|
+
{ "id": "q1-2025", "name": "Q1 2025", "period": "quarter" },
|
|
1270
|
+
{ "id": "q2-2025", "name": "Q2 2025", "period": "quarter" }
|
|
1271
|
+
],
|
|
1272
|
+
"items": [
|
|
1273
|
+
{
|
|
1274
|
+
"epicRef": "user-authentication",
|
|
1275
|
+
"startColumn": "q1-2025",
|
|
1276
|
+
"spanColumns": 1,
|
|
1277
|
+
"row": 0
|
|
1278
|
+
}
|
|
1279
|
+
],
|
|
1280
|
+
"settings": { "defaultPeriod": "quarter" }
|
|
1281
|
+
}
|
|
1282
|
+
\`\`\`
|
|
1283
|
+
|
|
1284
|
+
---
|
|
1285
|
+
|
|
1286
|
+
#### Workflow: From User Request to Implementation
|
|
1287
|
+
|
|
1288
|
+
**1. User/Product Owner Creates Epic:**
|
|
1289
|
+
\`\`\`
|
|
1290
|
+
"We need user authentication for the MVP"
|
|
1291
|
+
→ Create Epic: user-authentication
|
|
1292
|
+
→ Set priority: high
|
|
1293
|
+
→ Set dates: Q1 2025
|
|
1294
|
+
\`\`\`
|
|
1295
|
+
|
|
1296
|
+
**2. User/Product Owner Breaks Down Stories:**
|
|
1297
|
+
\`\`\`
|
|
1298
|
+
Epic: user-authentication
|
|
1299
|
+
→ Story: email-login (5 points)
|
|
1300
|
+
→ Story: oauth-integration (8 points)
|
|
1301
|
+
→ Story: password-reset (3 points)
|
|
1302
|
+
\`\`\`
|
|
1303
|
+
|
|
1304
|
+
**3. AI Agent Reads Story and Plans:**
|
|
1305
|
+
\`\`\`
|
|
1306
|
+
AI reads: email-login story
|
|
1307
|
+
→ Creates Task: implement-login-api (4 hours)
|
|
1308
|
+
→ Creates Task: build-login-form (3 hours)
|
|
1309
|
+
→ Creates Task: add-login-tests (2 hours)
|
|
1310
|
+
\`\`\`
|
|
1311
|
+
|
|
1312
|
+
**4. AI Agent Executes and Documents:**
|
|
1313
|
+
\`\`\`
|
|
1314
|
+
Task: implement-login-api
|
|
1315
|
+
→ Status: in_progress
|
|
1316
|
+
→ [AI implements code]
|
|
1317
|
+
→ Status: done
|
|
1318
|
+
→ Outcome: "Completed. Added rate limiting as discussed."
|
|
1319
|
+
\`\`\`
|
|
1320
|
+
|
|
1321
|
+
---
|
|
1322
|
+
|
|
1323
|
+
#### Best Practices for AI Agents
|
|
1324
|
+
|
|
1325
|
+
1. **Read the Story First**: Before creating tasks, fully understand the user story and acceptance criteria.
|
|
1326
|
+
|
|
1327
|
+
2. **Break Down Thoughtfully**: Create tasks that are:
|
|
1328
|
+
- Independently testable
|
|
1329
|
+
- 2-8 hours of work each
|
|
1330
|
+
- Clearly scoped with specific files
|
|
1331
|
+
|
|
1332
|
+
3. **Document Your Plan**: In \`plan_steps\`, explain:
|
|
1333
|
+
- What you'll do in each step
|
|
1334
|
+
- Why you're making certain choices
|
|
1335
|
+
- What files you'll touch
|
|
1336
|
+
|
|
1337
|
+
4. **Track Codebase Context**: Note relevant:
|
|
1338
|
+
- Existing patterns to follow
|
|
1339
|
+
- Related code to reference
|
|
1340
|
+
- Constraints or dependencies
|
|
1341
|
+
|
|
1342
|
+
5. **Update Outcomes**: After completing a task, document:
|
|
1343
|
+
- What was actually done
|
|
1344
|
+
- Any deviations from the plan
|
|
1345
|
+
- Issues encountered and how they were resolved
|
|
1346
|
+
|
|
620
1347
|
## Block References
|
|
621
1348
|
|
|
622
1349
|
Some blocks can reference other blocks using reference fields in frontmatter:
|
package/dist/cli/files.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/cli/files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,MAAM,KAAK,GAAe,EAAE,CAAC;IAE7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS,OAAO,CAAC,GAAW,EAAE,UAAkB;QAC9C,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAE7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAEzD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,2CAA2C;gBAC3C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBACjE,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,2BAA2B;gBAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC3C,IAAI,SAAS,KAAK,WAAW,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;oBAC7D,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;oBACnD,KAAK,CAAC,IAAI,CAAC;wBACT,IAAI,EAAE,YAAY;wBAClB,OAAO;qBACR,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC;AACf,CAAC;AAMD;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,WAAmB,EACnB,KAAiB,EACjB,UAAwB,EAAE;IAE1B,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEnC,6BAA6B;QAC7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;QAED,wEAAwE;QACxE,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChE,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAE5C,IAAI,UAAU,IAAI,UAAU,GAAG,UAAU,EAAE,CAAC;gBAC1C,wCAAwC;gBACxC,OAAO,EAAE,CAAC;gBACV,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7B,SAAS;YACX,CAAC;QACH,CAAC;QAED,aAAa;QACb,IAAI,CAAC;YACH,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAClD,OAAO,EAAE,CAAC;QACZ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,mBAAmB,IAAI,CAAC,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;YACtD,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,iCAAiC;IACjC,MAAM,eAAe,GAAG;QACtB,cAAc;QACd,OAAO;QACP,SAAS;QACT,OAAO;QACP,UAAU;QACV,WAAW;QACX,eAAe;QACf,0BAA0B;QAC1B,UAAU;QACV,WAAW;QACX,aAAa;KACd,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDlB,CAAC;QACE,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,uDAAuD;IACvD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAC1D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/cli/files.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsvCnB,CAAC;QACE,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,+DAA+D;IAC/D,gBAAgB,CAAC,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE;;;;;;;;;;;;CAYxF,CAAC,CAAC;IAED,gBAAgB,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE;;;;;;;;;;;CAWxE,CAAC,CAAC;IAED,gBAAgB,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE;;;;;;;;;;;;CAY9E,CAAC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACvB,WAAmB,EACnB,OAAe,EACf,GAAW,EACX,IAAY,EACZ,IAAY,EACZ,OAAe;IAEf,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC;IAC9D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG;QAChB,IAAI;WACD,OAAO;OACX,GAAG;QACF,IAAI;;;;EAIV,OAAO,EAAE,CAAC;QACR,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACpC,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|