@prmichaelsen/acp-mcp 0.1.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.
Files changed (94) hide show
  1. package/.env.example +5 -0
  2. package/AGENT.md +1279 -0
  3. package/README.md +78 -0
  4. package/agent/commands/acp.command-create.md +372 -0
  5. package/agent/commands/acp.design-create.md +224 -0
  6. package/agent/commands/acp.init.md +410 -0
  7. package/agent/commands/acp.package-create.md +894 -0
  8. package/agent/commands/acp.package-info.md +211 -0
  9. package/agent/commands/acp.package-install.md +461 -0
  10. package/agent/commands/acp.package-list.md +279 -0
  11. package/agent/commands/acp.package-publish.md +540 -0
  12. package/agent/commands/acp.package-remove.md +292 -0
  13. package/agent/commands/acp.package-search.md +306 -0
  14. package/agent/commands/acp.package-update.md +310 -0
  15. package/agent/commands/acp.package-validate.md +535 -0
  16. package/agent/commands/acp.pattern-create.md +326 -0
  17. package/agent/commands/acp.plan.md +552 -0
  18. package/agent/commands/acp.proceed.md +336 -0
  19. package/agent/commands/acp.project-create.md +672 -0
  20. package/agent/commands/acp.report.md +394 -0
  21. package/agent/commands/acp.resume.md +237 -0
  22. package/agent/commands/acp.status.md +280 -0
  23. package/agent/commands/acp.sync.md +363 -0
  24. package/agent/commands/acp.task-create.md +390 -0
  25. package/agent/commands/acp.update.md +301 -0
  26. package/agent/commands/acp.validate.md +436 -0
  27. package/agent/commands/acp.version-check-for-updates.md +275 -0
  28. package/agent/commands/acp.version-check.md +190 -0
  29. package/agent/commands/acp.version-update.md +288 -0
  30. package/agent/commands/command.template.md +316 -0
  31. package/agent/commands/git.commit.md +513 -0
  32. package/agent/commands/git.init.md +513 -0
  33. package/agent/commands/mcp-server-starter.add-tool.md +677 -0
  34. package/agent/commands/mcp-server-starter.init.md +894 -0
  35. package/agent/design/.gitkeep +0 -0
  36. package/agent/design/design.template.md +136 -0
  37. package/agent/design/remember-mcp-analysis.md +987 -0
  38. package/agent/design/requirements.template.md +387 -0
  39. package/agent/manifest.template.yaml +13 -0
  40. package/agent/manifest.yaml +109 -0
  41. package/agent/milestones/.gitkeep +0 -0
  42. package/agent/milestones/milestone-1-{title}.template.md +206 -0
  43. package/agent/package.template.yaml +36 -0
  44. package/agent/patterns/.gitkeep +0 -0
  45. package/agent/patterns/bootstrap.template.md +1237 -0
  46. package/agent/patterns/mcp-server-starter.bootstrap.md +597 -0
  47. package/agent/patterns/mcp-server-starter.build-config.md +554 -0
  48. package/agent/patterns/mcp-server-starter.config-management.md +525 -0
  49. package/agent/patterns/mcp-server-starter.server-factory.md +616 -0
  50. package/agent/patterns/mcp-server-starter.server-standalone.md +642 -0
  51. package/agent/patterns/mcp-server-starter.test-config.md +558 -0
  52. package/agent/patterns/mcp-server-starter.tool-creation.md +653 -0
  53. package/agent/patterns/pattern.template.md +364 -0
  54. package/agent/progress.template.yaml +161 -0
  55. package/agent/progress.yaml +33 -0
  56. package/agent/schemas/package.schema.yaml +161 -0
  57. package/agent/scripts/acp.common.sh +1362 -0
  58. package/agent/scripts/acp.install.sh +213 -0
  59. package/agent/scripts/acp.package-create.sh +925 -0
  60. package/agent/scripts/acp.package-info.sh +270 -0
  61. package/agent/scripts/acp.package-install.sh +550 -0
  62. package/agent/scripts/acp.package-list.sh +263 -0
  63. package/agent/scripts/acp.package-publish.sh +420 -0
  64. package/agent/scripts/acp.package-remove.sh +272 -0
  65. package/agent/scripts/acp.package-search.sh +156 -0
  66. package/agent/scripts/acp.package-update.sh +356 -0
  67. package/agent/scripts/acp.package-validate.sh +766 -0
  68. package/agent/scripts/acp.uninstall.sh +85 -0
  69. package/agent/scripts/acp.version-check-for-updates.sh +98 -0
  70. package/agent/scripts/acp.version-check.sh +47 -0
  71. package/agent/scripts/acp.version-update.sh +158 -0
  72. package/agent/scripts/acp.yaml-parser.sh +736 -0
  73. package/agent/scripts/acp.yaml-validate.sh +205 -0
  74. package/agent/tasks/.gitkeep +0 -0
  75. package/agent/tasks/task-1-{title}.template.md +225 -0
  76. package/dist/config.d.ts +4 -0
  77. package/dist/server-factory.d.ts +9 -0
  78. package/dist/server-factory.js +99 -0
  79. package/dist/server-factory.js.map +7 -0
  80. package/dist/server.d.ts +2 -0
  81. package/dist/server.js +106 -0
  82. package/dist/server.js.map +7 -0
  83. package/dist/tools/acp-remote-list-files.d.ts +15 -0
  84. package/dist/types/ssh-config.d.ts +16 -0
  85. package/esbuild.build.js +34 -0
  86. package/esbuild.watch.js +31 -0
  87. package/jest.config.js +31 -0
  88. package/package.json +54 -0
  89. package/src/config.ts +16 -0
  90. package/src/server-factory.ts +43 -0
  91. package/src/server.ts +46 -0
  92. package/src/tools/acp-remote-list-files.ts +89 -0
  93. package/src/types/ssh-config.ts +17 -0
  94. package/tsconfig.json +22 -0
@@ -0,0 +1,364 @@
1
+ # {Pattern Name}
2
+
3
+ **Category**: [Architecture | Design | Code | Testing | Deployment]
4
+ **Applicable To**: [What types of projects or components this pattern applies to]
5
+ **Status**: [Stable | Experimental | Deprecated]
6
+
7
+ ---
8
+
9
+ ## Overview
10
+
11
+ [Provide a high-level description of what this pattern is and when to use it. Include the problem space it addresses and the general approach it takes.]
12
+
13
+ **Example**: "The Service Layer Pattern provides a clear separation between business logic and data access, enabling better testability, maintainability, and code reuse across different interfaces (API, CLI, etc.)."
14
+
15
+ ---
16
+
17
+ ## When to Use This Pattern
18
+
19
+ [Describe the scenarios where this pattern is appropriate:]
20
+
21
+ ✅ **Use this pattern when:**
22
+ - Condition 1
23
+ - Condition 2
24
+ - Condition 3
25
+
26
+ ❌ **Don't use this pattern when:**
27
+ - Condition 1
28
+ - Condition 2
29
+ - Condition 3
30
+
31
+ **Example**:
32
+
33
+ ✅ **Use this pattern when:**
34
+ - You have complex business logic that needs to be shared across multiple interfaces
35
+ - You want to isolate business logic from infrastructure concerns
36
+ - You need to test business logic independently of data access
37
+
38
+ ❌ **Don't use this pattern when:**
39
+ - Your application is very simple with minimal business logic
40
+ - You're building a thin wrapper around a database
41
+ - The overhead of additional layers outweighs the benefits
42
+
43
+ ---
44
+
45
+ ## Core Principles
46
+
47
+ [List the fundamental concepts that underpin this pattern:]
48
+
49
+ 1. **Principle 1**: [Description]
50
+ 2. **Principle 2**: [Description]
51
+ 3. **Principle 3**: [Description]
52
+ 4. **Principle 4**: [Description]
53
+
54
+ **Example**:
55
+
56
+ 1. **Separation of Concerns**: Business logic is isolated from data access and presentation
57
+ 2. **Single Responsibility**: Each service handles one domain concept
58
+ 3. **Dependency Injection**: Services receive their dependencies rather than creating them
59
+ 4. **Interface-Based Design**: Services depend on abstractions, not concrete implementations
60
+
61
+ ---
62
+
63
+ ## Implementation
64
+
65
+ [Provide detailed implementation guidance with code examples:]
66
+
67
+ ### Structure
68
+
69
+ [Describe the overall structure of the pattern]
70
+
71
+ ```
72
+ directory-structure/
73
+ ├── component1/
74
+ │ └── file1.ext
75
+ └── component2/
76
+ └── file2.ext
77
+ ```
78
+
79
+ ### Code Example
80
+
81
+ [Provide a complete, working example:]
82
+
83
+ ```typescript
84
+ // Example implementation
85
+ interface ExampleInterface {
86
+ method(): Promise<Result>;
87
+ }
88
+
89
+ class ExampleImplementation implements ExampleInterface {
90
+ constructor(private dependency: Dependency) {}
91
+
92
+ async method(): Promise<Result> {
93
+ // Implementation
94
+ return result;
95
+ }
96
+ }
97
+ ```
98
+
99
+ ### Key Components
100
+
101
+ [Break down the major components:]
102
+
103
+ #### Component 1: [Name]
104
+ [Description and purpose]
105
+
106
+ ```typescript
107
+ // Code example for this component
108
+ ```
109
+
110
+ #### Component 2: [Name]
111
+ [Description and purpose]
112
+
113
+ ```typescript
114
+ // Code example for this component
115
+ ```
116
+
117
+ ---
118
+
119
+ ## Examples
120
+
121
+ [Provide multiple real-world examples showing different use cases:]
122
+
123
+ ### Example 1: [Use Case Name]
124
+
125
+ [Description of the scenario]
126
+
127
+ ```typescript
128
+ // Complete code example
129
+ class ConcreteExample {
130
+ // Implementation
131
+ }
132
+
133
+ // Usage
134
+ const example = new ConcreteExample();
135
+ const result = await example.doSomething();
136
+ ```
137
+
138
+ ### Example 2: [Use Case Name]
139
+
140
+ [Description of the scenario]
141
+
142
+ ```typescript
143
+ // Complete code example
144
+ ```
145
+
146
+ ---
147
+
148
+ ## Benefits
149
+
150
+ [List the advantages of using this pattern:]
151
+
152
+ ### 1. [Benefit Name]
153
+ [Detailed explanation of this benefit and why it matters]
154
+
155
+ ### 2. [Benefit Name]
156
+ [Detailed explanation of this benefit and why it matters]
157
+
158
+ ### 3. [Benefit Name]
159
+ [Detailed explanation of this benefit and why it matters]
160
+
161
+ **Example**:
162
+
163
+ ### 1. Testability
164
+ Business logic can be tested in isolation without requiring database connections or external services. Mock dependencies can be easily injected for unit testing.
165
+
166
+ ### 2. Reusability
167
+ The same business logic can be used across multiple interfaces (REST API, GraphQL, CLI, etc.) without duplication.
168
+
169
+ ### 3. Maintainability
170
+ Changes to business logic are centralized in service classes, making the codebase easier to understand and modify.
171
+
172
+ ---
173
+
174
+ ## Trade-offs
175
+
176
+ [Honestly assess the downsides and limitations:]
177
+
178
+ ### 1. [Trade-off Name]
179
+ **Downside**: [Description]
180
+ **Mitigation**: [How to minimize this downside]
181
+
182
+ ### 2. [Trade-off Name]
183
+ **Downside**: [Description]
184
+ **Mitigation**: [How to minimize this downside]
185
+
186
+ **Example**:
187
+
188
+ ### 1. Additional Complexity
189
+ **Downside**: Adds extra layers and files to the codebase, which can feel like over-engineering for simple applications.
190
+ **Mitigation**: Only apply this pattern when complexity justifies it. Start simple and refactor to this pattern as needs grow.
191
+
192
+ ### 2. Performance Overhead
193
+ **Downside**: Additional function calls and abstractions can add minor performance overhead.
194
+ **Mitigation**: In most applications, this overhead is negligible. Profile before optimizing.
195
+
196
+ ---
197
+
198
+ ## Anti-Patterns
199
+
200
+ [Document what NOT to do - common mistakes and misuses:]
201
+
202
+ ### ❌ Anti-Pattern 1: [Name]
203
+
204
+ **Description**: [What people do wrong]
205
+
206
+ **Why it's bad**: [Consequences]
207
+
208
+ **Instead, do this**: [Correct approach]
209
+
210
+ ```typescript
211
+ // ❌ Bad example
212
+ class BadExample {
213
+ // What not to do
214
+ }
215
+
216
+ // ✅ Good example
217
+ class GoodExample {
218
+ // Correct approach
219
+ }
220
+ ```
221
+
222
+ ### ❌ Anti-Pattern 2: [Name]
223
+
224
+ [Similar structure as above]
225
+
226
+ **Example**:
227
+
228
+ ### ❌ Anti-Pattern 1: God Service
229
+
230
+ **Description**: Creating a single service class that handles all business logic for the entire application.
231
+
232
+ **Why it's bad**: Violates single responsibility principle, becomes difficult to test and maintain, creates tight coupling.
233
+
234
+ **Instead, do this**: Create focused services, each handling a specific domain concept.
235
+
236
+ ```typescript
237
+ // ❌ Bad: Everything in one service
238
+ class ApplicationService {
239
+ createUser() {}
240
+ deleteUser() {}
241
+ createProduct() {}
242
+ deleteProduct() {}
243
+ processPayment() {}
244
+ sendEmail() {}
245
+ }
246
+
247
+ // ✅ Good: Focused services
248
+ class UserService {
249
+ createUser() {}
250
+ deleteUser() {}
251
+ }
252
+
253
+ class ProductService {
254
+ createProduct() {}
255
+ deleteProduct() {}
256
+ }
257
+
258
+ class PaymentService {
259
+ processPayment() {}
260
+ }
261
+ ```
262
+
263
+ ---
264
+
265
+ ## Testing Strategy
266
+
267
+ [Describe how to test code that uses this pattern:]
268
+
269
+ ### Unit Testing
270
+ [Approach for unit tests]
271
+
272
+ ```typescript
273
+ // Example unit test
274
+ describe('ExampleService', () => {
275
+ it('should do something', async () => {
276
+ // Test implementation
277
+ });
278
+ });
279
+ ```
280
+
281
+ ### Integration Testing
282
+ [Approach for integration tests]
283
+
284
+ ```typescript
285
+ // Example integration test
286
+ ```
287
+
288
+ ---
289
+
290
+ ## Related Patterns
291
+
292
+ [Link to related patterns and explain relationships:]
293
+
294
+ - **[Pattern Name](./pattern-name.md)**: [How it relates]
295
+ - **[Pattern Name](./pattern-name.md)**: [How it relates]
296
+ - **[Pattern Name](./pattern-name.md)**: [How it relates]
297
+
298
+ **Example**:
299
+ - **[Repository Pattern](./repository-pattern.md)**: Often used together; services use repositories for data access
300
+ - **[Factory Pattern](./factory-pattern.md)**: Can be used to create service instances with proper dependencies
301
+ - **[Dependency Injection](./dependency-injection.md)**: Essential for implementing this pattern correctly
302
+
303
+ ---
304
+
305
+ ## Migration Guide
306
+
307
+ [If adopting this pattern in an existing codebase, provide migration steps:]
308
+
309
+ ### Step 1: [Action]
310
+ [Detailed description]
311
+
312
+ ### Step 2: [Action]
313
+ [Detailed description]
314
+
315
+ ### Step 3: [Action]
316
+ [Detailed description]
317
+
318
+ **Example**:
319
+
320
+ ### Step 1: Identify Business Logic
321
+ Review existing code and identify business logic that's currently mixed with data access or presentation code.
322
+
323
+ ### Step 2: Extract to Services
324
+ Create service classes and move business logic into them. Start with the most complex or frequently used logic.
325
+
326
+ ### Step 3: Refactor Dependencies
327
+ Update calling code to use the new services. Inject dependencies rather than creating them directly.
328
+
329
+ ---
330
+
331
+ ## References
332
+
333
+ [Link to external resources, papers, books, or articles:]
334
+
335
+ - [Resource 1](URL): Description
336
+ - [Resource 2](URL): Description
337
+ - [Resource 3](URL): Description
338
+
339
+ **Example**:
340
+ - [Martin Fowler - Service Layer](https://martinfowler.com/eaaCatalog/serviceLayer.html): Original pattern description
341
+ - [Clean Architecture](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html): Related architectural concepts
342
+ - [Domain-Driven Design](https://www.domainlanguage.com/ddd/): Context for service design
343
+
344
+ ---
345
+
346
+ ## Checklist for Implementation
347
+
348
+ [Provide a checklist to ensure proper implementation:]
349
+
350
+ - [ ] Services are focused on single domain concepts
351
+ - [ ] Dependencies are injected, not created internally
352
+ - [ ] Business logic is isolated from infrastructure concerns
353
+ - [ ] Services have clear, well-documented interfaces
354
+ - [ ] Unit tests cover business logic in isolation
355
+ - [ ] Integration tests verify end-to-end functionality
356
+ - [ ] Error handling is consistent and appropriate
357
+ - [ ] Logging provides adequate visibility
358
+
359
+ ---
360
+
361
+ **Status**: [Current status of this pattern document]
362
+ **Recommendation**: [When and how to use this pattern]
363
+ **Last Updated**: [YYYY-MM-DD]
364
+ **Contributors**: [Names or "Community"]
@@ -0,0 +1,161 @@
1
+ # Project Progress Tracking
2
+ # This file tracks the overall progress of the project, including milestones, tasks, and recent work.
3
+ # Update this file regularly as work progresses.
4
+
5
+ project:
6
+ name: project-name # Replace with your project name
7
+ version: 0.1.0 # Current version (semantic versioning)
8
+ started: YYYY-MM-DD # Date project started
9
+ status: not_started # not_started | in_progress | completed
10
+ current_milestone: M1 # Current milestone identifier
11
+ description: | # Brief project description
12
+ A short description of what this project does and its main purpose.
13
+
14
+ # Milestones represent major phases of the project
15
+ milestones:
16
+ - id: M1 # Unique milestone identifier
17
+ name: Milestone Name # Descriptive name
18
+ status: not_started # not_started | in_progress | completed
19
+ progress: 0 # Percentage complete (0-100)
20
+ started: null # YYYY-MM-DD when started, null if not started
21
+ completed: null # YYYY-MM-DD when completed, null if not completed
22
+ estimated_weeks: 2 # Estimated duration in weeks
23
+ tasks_completed: 0 # Number of tasks completed
24
+ tasks_total: 5 # Total number of tasks in this milestone
25
+ notes: | # Progress notes and observations
26
+ Notes about this milestone's progress, blockers, or important decisions.
27
+
28
+ - id: M2
29
+ name: Second Milestone Name
30
+ status: not_started
31
+ progress: 0
32
+ started: null
33
+ completed: null
34
+ estimated_weeks: 3
35
+ tasks_completed: 0
36
+ tasks_total: 7
37
+ notes: |
38
+ This milestone depends on M1 completion.
39
+
40
+ # Tasks are granular work items within milestones
41
+ tasks:
42
+ milestone_1: # Group tasks by milestone
43
+ - id: task-1 # Unique task identifier
44
+ name: Task Name # Descriptive task name
45
+ status: not_started # not_started | in_progress | completed
46
+ file: agent/tasks/task-1-name.md # Path to task document
47
+ estimated_hours: 4 # Estimated time in hours
48
+ actual_hours: null # Actual time spent (null until completed)
49
+ completed_date: null # YYYY-MM-DD when completed, null if not completed
50
+ notes: | # Task-specific notes
51
+ Any important notes about this task.
52
+
53
+ - id: task-2
54
+ name: Second Task Name
55
+ status: not_started
56
+ file: agent/tasks/task-2-name.md
57
+ estimated_hours: 2
58
+ actual_hours: null
59
+ completed_date: null
60
+ notes: |
61
+ Depends on task-1 completion.
62
+
63
+ milestone_2:
64
+ - id: task-3
65
+ name: Third Task Name
66
+ status: not_started
67
+ file: agent/tasks/task-3-name.md
68
+ estimated_hours: 6
69
+ actual_hours: null
70
+ completed_date: null
71
+ notes: |
72
+ First task of second milestone.
73
+
74
+ # Documentation tracking
75
+ documentation:
76
+ design_documents: 0 # Number of design documents created
77
+ milestone_documents: 0 # Number of milestone documents
78
+ pattern_documents: 0 # Number of pattern documents
79
+ task_documents: 0 # Number of task documents
80
+ last_updated: YYYY-MM-DD # Last documentation update date
81
+
82
+ # Overall progress metrics
83
+ progress:
84
+ planning: 0 # Planning phase completion (0-100%)
85
+ implementation: 0 # Implementation phase completion (0-100%)
86
+ testing: 0 # Testing phase completion (0-100%)
87
+ documentation: 0 # Documentation completion (0-100%)
88
+ overall: 0 # Overall project completion (0-100%)
89
+
90
+ # Recent work log (most recent first)
91
+ recent_work:
92
+ - date: YYYY-MM-DD # Date of work
93
+ description: | # Description of what was done
94
+ Brief description of work completed on this date.
95
+ items: # Specific items completed
96
+ - ✅ Completed item 1
97
+ - ✅ Completed item 2
98
+ - ⚠️ Warning or note about something
99
+ - 📋 Pending item or follow-up needed
100
+
101
+ - date: YYYY-MM-DD
102
+ description: |
103
+ Earlier work session description.
104
+ items:
105
+ - ✅ Another completed item
106
+ - 📋 Something to revisit
107
+
108
+ # Next steps (prioritized list)
109
+ next_steps:
110
+ - Next action item 1 (highest priority)
111
+ - Next action item 2
112
+ - Next action item 3
113
+ - Future consideration or enhancement
114
+
115
+ # General notes and observations
116
+ notes:
117
+ - Important note 1 about the project
118
+ - Important note 2 about architectural decisions
119
+ - Important note 3 about dependencies or constraints
120
+
121
+ # Current blockers (remove when resolved)
122
+ current_blockers:
123
+ - Blocker 1: Description of what's blocking progress
124
+ - Blocker 2: Another blocker and potential resolution
125
+
126
+ # Team and contributors (if applicable)
127
+ team:
128
+ - role: Lead Developer # Role or responsibility
129
+ name: Name or "Agent" # Name or identifier
130
+ focus: | # Current focus area
131
+ What this person/agent is currently working on
132
+
133
+ - role: Documentation
134
+ name: Name or "Agent"
135
+ focus: |
136
+ Maintaining documentation and patterns
137
+
138
+ # Dependencies and integrations
139
+ dependencies:
140
+ external_services: # External services this project depends on
141
+ - name: Service Name
142
+ status: configured | pending | blocked
143
+ notes: |
144
+ Notes about this dependency
145
+
146
+ libraries: # Key library dependencies
147
+ - name: Library Name
148
+ version: 1.0.0
149
+ purpose: |
150
+ Why this library is used
151
+
152
+ infrastructure: # Infrastructure requirements
153
+ - name: Infrastructure Component
154
+ status: ready | pending | blocked
155
+ notes: |
156
+ Notes about this infrastructure
157
+
158
+ # Quality metrics (optional)
159
+ quality:
160
+ test_coverage: 0 # Percentage (0-100)
161
+ code_review_status: pending # pending | in
@@ -0,0 +1,33 @@
1
+ project:
2
+ name: acp-mcp
3
+ version: 0.1.0
4
+ started: 2026-02-22
5
+ status: in_progress
6
+ description: |
7
+ Support remote machine development using ACP methodology
8
+
9
+ milestones: []
10
+
11
+ tasks: {}
12
+
13
+ documentation:
14
+ design_documents: 0
15
+ milestone_documents: 0
16
+ pattern_documents: 0
17
+ task_documents: 0
18
+
19
+ progress:
20
+ planning: 0
21
+ implementation: 0
22
+ overall: 0
23
+
24
+ recent_work: []
25
+
26
+ next_steps:
27
+ - Define project requirements in agent/design/requirements.md
28
+ - Plan milestones and tasks with @acp.plan
29
+ - Start development with @acp.proceed
30
+
31
+ notes: []
32
+
33
+ current_blockers: []
@@ -0,0 +1,161 @@
1
+ # Package YAML Schema
2
+ # Schema for validating ACP package.yaml files
3
+ # Version: 1.0.0
4
+
5
+ schema_version: 1.0.0
6
+ description: Schema for ACP package.yaml files
7
+
8
+ # Required fields that must be present
9
+ required_fields:
10
+ - name
11
+ - version
12
+ - description
13
+ - author
14
+ - license
15
+ - repository
16
+
17
+ # Field definitions with validation rules
18
+ fields:
19
+ name:
20
+ type: string
21
+ pattern: "^[a-z0-9-]+$"
22
+ description: "Package name (lowercase, alphanumeric, hyphens only)"
23
+ error_message: "Package name must be lowercase letters, numbers, and hyphens only"
24
+
25
+ version:
26
+ type: string
27
+ pattern: "^[0-9]+\\.[0-9]+\\.[0-9]+$"
28
+ description: "Semantic version (X.Y.Z)"
29
+ error_message: "Version must be in semantic versioning format (e.g., 1.0.0)"
30
+
31
+ description:
32
+ type: string
33
+ min_length: 10
34
+ max_length: 200
35
+ description: "One-line package description"
36
+ error_message: "Description must be between 10 and 200 characters"
37
+
38
+ author:
39
+ type: string
40
+ min_length: 2
41
+ description: "Package author name"
42
+ error_message: "Author name must be at least 2 characters"
43
+
44
+ license:
45
+ type: string
46
+ description: "License identifier (e.g., MIT, Apache-2.0)"
47
+ error_message: "License must be specified"
48
+
49
+ repository:
50
+ type: string
51
+ pattern: "^https?://.*\\.git$"
52
+ description: "Git repository URL (must end with .git)"
53
+ error_message: "Repository must be a valid git URL ending with .git"
54
+
55
+ homepage:
56
+ type: string
57
+ pattern: "^https?://.*"
58
+ required: false
59
+ description: "Package homepage URL"
60
+ error_message: "Homepage must be a valid HTTP/HTTPS URL"
61
+
62
+ tags:
63
+ type: array
64
+ item_type: string
65
+ required: false
66
+ description: "Tags for package discovery"
67
+
68
+ release:
69
+ type: object
70
+ required: false
71
+ description: "Release configuration"
72
+ fields:
73
+ branch:
74
+ type: string
75
+ description: "Release branch name (e.g., main, master, mainline)"
76
+ branches:
77
+ type: array
78
+ item_type: string
79
+ required: false
80
+ description: "Additional valid release branches"
81
+
82
+ contents:
83
+ type: object
84
+ required: true
85
+ description: "Package contents (patterns, commands, designs)"
86
+ fields:
87
+ patterns:
88
+ type: array
89
+ item_type: object
90
+ required: false
91
+ description: "List of pattern files (each with 'name' field)"
92
+ item_fields:
93
+ name:
94
+ type: string
95
+ required: true
96
+ description: "Pattern filename (e.g., namespace.pattern-name.md)"
97
+ commands:
98
+ type: array
99
+ item_type: object
100
+ required: false
101
+ description: "List of command files (each with 'name' field)"
102
+ item_fields:
103
+ name:
104
+ type: string
105
+ required: true
106
+ description: "Command filename (e.g., namespace.command-name.md)"
107
+ designs:
108
+ type: array
109
+ item_type: object
110
+ required: false
111
+ description: "List of design files (each with 'name' field)"
112
+ item_fields:
113
+ name:
114
+ type: string
115
+ required: true
116
+ description: "Design filename (e.g., namespace.design-name.md)"
117
+ scripts:
118
+ type: array
119
+ item_type: object
120
+ required: false
121
+ description: "List of script files (each with 'name' field)"
122
+ item_fields:
123
+ name:
124
+ type: string
125
+ required: true
126
+ pattern: "^[a-z0-9-]+\\.[a-z0-9-]+\\.sh$"
127
+ description: "Script filename with namespace (e.g., namespace.script-name.sh)"
128
+
129
+ requires:
130
+ type: object
131
+ required: false
132
+ description: "Compatibility requirements"
133
+ fields:
134
+ acp:
135
+ type: string
136
+ pattern: "^>=?[0-9]+\\.[0-9]+\\.[0-9]+$"
137
+ description: "Minimum ACP version (e.g., >=2.0.0)"
138
+ npm:
139
+ type: object
140
+ required: false
141
+ description: "Required npm packages"
142
+ pip:
143
+ type: object
144
+ required: false
145
+ description: "Required Python packages"
146
+ cargo:
147
+ type: object
148
+ required: false
149
+ description: "Required Rust packages"
150
+ go:
151
+ type: object
152
+ required: false
153
+ description: "Required Go packages"
154
+
155
+ # Reserved package names that cannot be used
156
+ reserved_names:
157
+ - acp
158
+ - local
159
+ - core
160
+ - system
161
+ - global