tick-md 1.0.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 (82) hide show
  1. package/README.md +228 -0
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +282 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/add.d.ts +15 -0
  7. package/dist/commands/add.d.ts.map +1 -0
  8. package/dist/commands/add.js +95 -0
  9. package/dist/commands/add.js.map +1 -0
  10. package/dist/commands/agent.d.ts +20 -0
  11. package/dist/commands/agent.d.ts.map +1 -0
  12. package/dist/commands/agent.js +125 -0
  13. package/dist/commands/agent.js.map +1 -0
  14. package/dist/commands/claim.d.ts +9 -0
  15. package/dist/commands/claim.d.ts.map +1 -0
  16. package/dist/commands/claim.js +161 -0
  17. package/dist/commands/claim.js.map +1 -0
  18. package/dist/commands/done.d.ts +9 -0
  19. package/dist/commands/done.d.ts.map +1 -0
  20. package/dist/commands/done.js +152 -0
  21. package/dist/commands/done.js.map +1 -0
  22. package/dist/commands/graph.d.ts +9 -0
  23. package/dist/commands/graph.d.ts.map +1 -0
  24. package/dist/commands/graph.js +143 -0
  25. package/dist/commands/graph.js.map +1 -0
  26. package/dist/commands/init.d.ts +9 -0
  27. package/dist/commands/init.d.ts.map +1 -0
  28. package/dist/commands/init.js +78 -0
  29. package/dist/commands/init.js.map +1 -0
  30. package/dist/commands/list.d.ts +15 -0
  31. package/dist/commands/list.d.ts.map +1 -0
  32. package/dist/commands/list.js +104 -0
  33. package/dist/commands/list.js.map +1 -0
  34. package/dist/commands/status.d.ts +5 -0
  35. package/dist/commands/status.d.ts.map +1 -0
  36. package/dist/commands/status.js +137 -0
  37. package/dist/commands/status.js.map +1 -0
  38. package/dist/commands/sync.d.ts +13 -0
  39. package/dist/commands/sync.d.ts.map +1 -0
  40. package/dist/commands/sync.js +141 -0
  41. package/dist/commands/sync.js.map +1 -0
  42. package/dist/commands/validate.d.ts +8 -0
  43. package/dist/commands/validate.d.ts.map +1 -0
  44. package/dist/commands/validate.js +103 -0
  45. package/dist/commands/validate.js.map +1 -0
  46. package/dist/commands/watch.d.ts +10 -0
  47. package/dist/commands/watch.d.ts.map +1 -0
  48. package/dist/commands/watch.js +136 -0
  49. package/dist/commands/watch.js.map +1 -0
  50. package/dist/index.d.ts +4 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +4 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/parser/index.d.ts +3 -0
  55. package/dist/parser/index.d.ts.map +1 -0
  56. package/dist/parser/index.js +3 -0
  57. package/dist/parser/index.js.map +1 -0
  58. package/dist/parser/parse.d.ts +6 -0
  59. package/dist/parser/parse.d.ts.map +1 -0
  60. package/dist/parser/parse.js +178 -0
  61. package/dist/parser/parse.js.map +1 -0
  62. package/dist/parser/serialize.d.ts +10 -0
  63. package/dist/parser/serialize.d.ts.map +1 -0
  64. package/dist/parser/serialize.js +122 -0
  65. package/dist/parser/serialize.js.map +1 -0
  66. package/dist/types.d.ts +59 -0
  67. package/dist/types.d.ts.map +1 -0
  68. package/dist/types.js +3 -0
  69. package/dist/types.js.map +1 -0
  70. package/dist/utils/git.d.ts +54 -0
  71. package/dist/utils/git.d.ts.map +1 -0
  72. package/dist/utils/git.js +192 -0
  73. package/dist/utils/git.js.map +1 -0
  74. package/dist/utils/lock.d.ts +47 -0
  75. package/dist/utils/lock.d.ts.map +1 -0
  76. package/dist/utils/lock.js +128 -0
  77. package/dist/utils/lock.js.map +1 -0
  78. package/dist/utils/validator.d.ts +17 -0
  79. package/dist/utils/validator.d.ts.map +1 -0
  80. package/dist/utils/validator.js +188 -0
  81. package/dist/utils/validator.js.map +1 -0
  82. package/package.json +56 -0
package/README.md ADDED
@@ -0,0 +1,228 @@
1
+ # Tick CLI
2
+
3
+ The command-line interface for the Tick.md multi-agent coordination protocol.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install -g tick-md
9
+ ```
10
+
11
+ Or use without installing:
12
+
13
+ ```bash
14
+ npx tick-md init
15
+ ```
16
+
17
+ ## Quick Start
18
+
19
+ ```bash
20
+ # Initialize a new Tick project
21
+ tick init
22
+
23
+ # Check project status
24
+ tick status
25
+
26
+ # Add a new task
27
+ tick add "Build authentication system" --priority high --tags backend,security
28
+
29
+ # Register as an agent
30
+ tick agent register @yourname --role engineer
31
+
32
+ # Claim a task
33
+ tick claim TASK-001 @yourname
34
+
35
+ # Update task status
36
+ tick done TASK-001 @yourname
37
+
38
+ # Sync to git
39
+ tick sync
40
+ ```
41
+
42
+ ## Development
43
+
44
+ ```bash
45
+ # Install dependencies
46
+ npm install
47
+
48
+ # Build TypeScript
49
+ npm run build
50
+
51
+ # Run locally
52
+ node dist/cli.js init
53
+ ```
54
+
55
+ ## Architecture
56
+
57
+ ### Parser (`src/parser/`)
58
+
59
+ - **parse.ts** - Reads TICK.md files into structured data
60
+ - Uses `gray-matter` for YAML frontmatter
61
+ - Custom parser for agent tables (Markdown tables)
62
+ - Custom parser for task blocks (YAML + Markdown)
63
+
64
+ - **serialize.ts** - Writes structured data back to TICK.md format
65
+ - Uses `yaml` library for proper multi-line YAML
66
+ - Generates compliant task blocks
67
+ - Template generation for new projects
68
+
69
+ ### Commands (`src/commands/`)
70
+
71
+ - **init.ts** - Initialize new Tick projects
72
+ - **add.ts** - Create new tasks with auto-ID generation
73
+ - **claim.ts** - Claim and release tasks with locking
74
+ - **done.ts** - Complete tasks and add comments
75
+ - **status.ts** - Terminal UI with colored output
76
+ - **list.ts** - List tasks with filtering and JSON output
77
+ - **graph.ts** - Visualize task dependencies (ASCII/Mermaid)
78
+ - **watch.ts** - Real-time task monitoring
79
+ - **sync.ts** - Git integration with smart commit messages
80
+ - **validate.ts** - Comprehensive TICK.md validation
81
+ - **agent.ts** - Agent registration and listing
82
+
83
+ ### Utils (`src/utils/`)
84
+
85
+ - **lock.ts** - Advisory file locking manager
86
+ - **git.ts** - Git operations (status, commit, push, pull)
87
+ - **validator.ts** - Validation logic with circular dependency detection
88
+
89
+ ### Types (`src/types.ts`)
90
+
91
+ Full TypeScript definitions for:
92
+ - Tasks, Agents, History entries
93
+ - Project metadata
94
+ - Status, priority, trust level enums
95
+
96
+ ## File Structure
97
+
98
+ ```
99
+ cli/
100
+ ├── src/
101
+ │ ├── parser/
102
+ │ │ ├── parse.ts # TICK.md → JavaScript objects
103
+ │ │ ├── serialize.ts # JavaScript objects → TICK.md
104
+ │ │ └── index.ts
105
+ │ ├── commands/
106
+ │ │ ├── init.ts # tick init
107
+ │ │ └── ... # Future commands
108
+ │ ├── types.ts # TypeScript types
109
+ │ ├── cli.ts # Main CLI entry
110
+ │ └── index.ts
111
+ ├── dist/ # Compiled JavaScript
112
+ ├── package.json
113
+ └── tsconfig.json
114
+ ```
115
+
116
+ ## Commands
117
+
118
+ ### Core Workflow
119
+
120
+ ```bash
121
+ # Initialize project
122
+ tick init [--name <name>] [--force]
123
+
124
+ # View project status
125
+ tick status
126
+
127
+ # List and filter tasks
128
+ tick list [--status <status>] [--priority <priority>] [--tag <tag>] [--json]
129
+
130
+ # Visualize dependencies
131
+ tick graph [--format ascii|mermaid] [--show-done]
132
+
133
+ # Watch for changes
134
+ tick watch [--interval <seconds>] [--filter <status>]
135
+
136
+ # Add tasks
137
+ tick add <title> [--priority <level>] [--tags <list>] [--assigned-to <agent>]
138
+
139
+ # Register agents
140
+ tick agent register <name> [--type human|bot] [--roles <list>] [--status <status>]
141
+ tick agent list [--status <filter>] [--type <filter>] [--verbose]
142
+
143
+ # Claim and work on tasks
144
+ tick claim <task-id> <agent>
145
+ tick release <task-id> <agent>
146
+ tick done <task-id> <agent>
147
+ tick comment <task-id> <agent> --note <text>
148
+
149
+ # Validation
150
+ tick validate [--verbose]
151
+
152
+ # Git sync
153
+ tick sync [--push] [--pull] [--message <text>] [--init]
154
+ ```
155
+
156
+ ### Command Reference
157
+
158
+ | Command | Status | Description |
159
+ |---------|--------|-------------|
160
+ | `tick init` | ✅ | Initialize new Tick project |
161
+ | `tick status` | ✅ | Show project summary with progress |
162
+ | `tick list` | ✅ | List tasks with filters and JSON output |
163
+ | `tick graph` | ✅ | Visualize dependencies (ASCII/Mermaid) |
164
+ | `tick watch` | ✅ | Real-time task monitoring |
165
+ | `tick add` | ✅ | Create new tasks with metadata |
166
+ | `tick claim` | ✅ | Claim task for agent (sets in_progress) |
167
+ | `tick release` | ✅ | Release claimed task (back to todo) |
168
+ | `tick done` | ✅ | Mark task complete, unblock dependents |
169
+ | `tick comment` | ✅ | Add notes to task history |
170
+ | `tick sync` | ✅ | Commit TICK.md to git with smart messages |
171
+ | `tick validate` | ✅ | Validate TICK.md structure and references |
172
+ | `tick agent register` | ✅ | Register new agent (human or bot) |
173
+ | `tick agent list` | ✅ | List agents with filtering |
174
+
175
+ ## Technical Decisions
176
+
177
+ ### Parser Strategy: Hybrid
178
+ - **Frontmatter**: `gray-matter` (battle-tested, 13M weekly downloads)
179
+ - **Agent tables**: Custom Markdown table parser
180
+ - **Task blocks**: Custom YAML code block + description parser
181
+
182
+ ### CLI Language: Node.js/TypeScript
183
+ - Matches frontend stack
184
+ - Easy npm distribution (`npx tick-md`)
185
+ - Shared types with dashboard
186
+ - Fast enough for file operations
187
+
188
+ ### Locking: Optimistic + Advisory
189
+ - `.tick/lock` file provides advisory hint (PID, agent, timestamp)
190
+ - Git is source of truth for conflicts
191
+ - CLI warns on conflicts, shows diff
192
+ - Works offline (lock is local)
193
+
194
+ ## Next Steps (Roadmap)
195
+
196
+ ### ✅ Completed
197
+
198
+ 1. **MCP Server** - Model Context Protocol integration ✅
199
+ - Enable AI agents to use tick commands
200
+ - Real-time collaboration between human and AI agents
201
+
202
+ 2. **Watch Mode** - Real-time file monitoring ✅
203
+ - `tick watch` for live updates
204
+ - Auto-validation on changes
205
+
206
+ 3. **Advanced Filtering** - Task discovery ✅
207
+ - `tick list --status todo --priority high`
208
+ - JSON output for scripting
209
+
210
+ 4. **Dependency Visualization** ✅
211
+ - `tick graph` - ASCII dependency graph
212
+ - Mermaid flowchart output
213
+
214
+ ### Planned Features
215
+
216
+ 1. **Cloud Sync** - Optional hosted dashboard
217
+ - Push local TICK.md to cloud
218
+ - Web-based visualization
219
+ - Team collaboration
220
+
221
+ 2. **Plugins & Extensions**
222
+ - Custom validators
223
+ - Task templates
224
+ - Webhook integrations
225
+
226
+ ## License
227
+
228
+ MIT · Purple Horizons
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,282 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "commander";
3
+ import chalk from "chalk";
4
+ import { initCommand } from "./commands/init.js";
5
+ import { addCommand } from "./commands/add.js";
6
+ import { claimCommand, releaseCommand } from "./commands/claim.js";
7
+ import { doneCommand, commentCommand } from "./commands/done.js";
8
+ import { statusCommand } from "./commands/status.js";
9
+ import { syncCommand } from "./commands/sync.js";
10
+ import { validateCommand } from "./commands/validate.js";
11
+ import { registerAgentCommand, listAgentsCommand } from "./commands/agent.js";
12
+ import { listCommand } from "./commands/list.js";
13
+ import { graphCommand } from "./commands/graph.js";
14
+ import { watchCommand } from "./commands/watch.js";
15
+ const program = new Command();
16
+ program
17
+ .name("tick")
18
+ .description("Multi-agent task coordination via Markdown")
19
+ .version("0.1.0");
20
+ // Init command
21
+ program
22
+ .command("init")
23
+ .description("Initialize a new Tick project")
24
+ .option("-n, --name <name>", "Project name")
25
+ .option("-f, --force", "Overwrite existing TICK.md")
26
+ .action(async (options) => {
27
+ try {
28
+ await initCommand({
29
+ projectName: options.name,
30
+ force: options.force,
31
+ });
32
+ }
33
+ catch (error) {
34
+ console.error(chalk.red("Error:"), error.message);
35
+ process.exit(1);
36
+ }
37
+ });
38
+ // Status command
39
+ program
40
+ .command("status")
41
+ .description("Show project status and task summary")
42
+ .action(async () => {
43
+ try {
44
+ await statusCommand();
45
+ }
46
+ catch (error) {
47
+ console.error(chalk.red("Error:"), error.message);
48
+ process.exit(1);
49
+ }
50
+ });
51
+ // Add command
52
+ program
53
+ .command("add <title>")
54
+ .description("Create a new task")
55
+ .option("-p, --priority <priority>", "Priority (urgent|high|medium|low)", "medium")
56
+ .option("-t, --tags <tags>", "Comma-separated tags")
57
+ .option("-a, --assigned-to <agent>", "Assign to agent")
58
+ .option("-d, --description <text>", "Task description")
59
+ .option("--depends-on <tasks>", "Comma-separated task IDs this depends on")
60
+ .option("--blocks <tasks>", "Comma-separated task IDs this blocks")
61
+ .option("--estimated-hours <hours>", "Estimated hours to complete", parseFloat)
62
+ .action(async (title, options) => {
63
+ try {
64
+ await addCommand(title, {
65
+ priority: options.priority,
66
+ tags: options.tags ? options.tags.split(",").map((t) => t.trim()) : undefined,
67
+ assignedTo: options.assignedTo,
68
+ description: options.description,
69
+ dependsOn: options.dependsOn ? options.dependsOn.split(",").map((t) => t.trim()) : undefined,
70
+ blocks: options.blocks ? options.blocks.split(",").map((t) => t.trim()) : undefined,
71
+ estimatedHours: options.estimatedHours,
72
+ });
73
+ }
74
+ catch (error) {
75
+ console.error(chalk.red("Error:"), error.message);
76
+ process.exit(1);
77
+ }
78
+ });
79
+ // Claim command
80
+ program
81
+ .command("claim <task-id> <agent>")
82
+ .description("Claim a task for an agent")
83
+ .action(async (taskId, agent) => {
84
+ try {
85
+ await claimCommand(taskId, agent);
86
+ }
87
+ catch (error) {
88
+ console.error(chalk.red("Error:"), error.message);
89
+ process.exit(1);
90
+ }
91
+ });
92
+ // Release command
93
+ program
94
+ .command("release <task-id> <agent>")
95
+ .description("Release a claimed task")
96
+ .action(async (taskId, agent) => {
97
+ try {
98
+ await releaseCommand(taskId, agent);
99
+ }
100
+ catch (error) {
101
+ console.error(chalk.red("Error:"), error.message);
102
+ process.exit(1);
103
+ }
104
+ });
105
+ // Done command
106
+ program
107
+ .command("done <task-id> <agent>")
108
+ .description("Mark a task as complete")
109
+ .action(async (taskId, agent) => {
110
+ try {
111
+ await doneCommand(taskId, agent);
112
+ }
113
+ catch (error) {
114
+ console.error(chalk.red("Error:"), error.message);
115
+ process.exit(1);
116
+ }
117
+ });
118
+ // Comment command
119
+ program
120
+ .command("comment <task-id> <agent>")
121
+ .description("Add a comment to a task")
122
+ .requiredOption("-n, --note <text>", "Comment text")
123
+ .action(async (taskId, agent, options) => {
124
+ try {
125
+ await commentCommand(taskId, agent, options.note);
126
+ }
127
+ catch (error) {
128
+ console.error(chalk.red("Error:"), error.message);
129
+ process.exit(1);
130
+ }
131
+ });
132
+ // Sync command
133
+ program
134
+ .command("sync")
135
+ .description("Commit TICK.md changes to git")
136
+ .option("--push", "Push to remote after committing")
137
+ .option("--pull", "Pull from remote before committing")
138
+ .option("-m, --message <text>", "Custom commit message")
139
+ .option("--init", "Initialize git repo if not exists")
140
+ .option("--remote <name>", "Remote name (default: origin)", "origin")
141
+ .option("--branch <name>", "Branch name (default: current)")
142
+ .action(async (options) => {
143
+ try {
144
+ await syncCommand({
145
+ push: options.push,
146
+ pull: options.pull,
147
+ message: options.message,
148
+ init: options.init,
149
+ remote: options.remote,
150
+ branch: options.branch,
151
+ });
152
+ }
153
+ catch (error) {
154
+ console.error(chalk.red("Error:"), error.message);
155
+ process.exit(1);
156
+ }
157
+ });
158
+ // Validate command
159
+ program
160
+ .command("validate")
161
+ .description("Validate TICK.md for errors and warnings")
162
+ .option("-v, --verbose", "Show detailed validation stats")
163
+ .action(async (options) => {
164
+ try {
165
+ await validateCommand({
166
+ verbose: options.verbose,
167
+ });
168
+ }
169
+ catch (error) {
170
+ console.error(chalk.red("Error:"), error.message);
171
+ process.exit(1);
172
+ }
173
+ });
174
+ // Agent commands
175
+ const agent = program
176
+ .command("agent")
177
+ .description("Manage agents");
178
+ agent
179
+ .command("register <name>")
180
+ .description("Register a new agent")
181
+ .option("-t, --type <type>", "Agent type (human|bot)", "human")
182
+ .option("-r, --roles <roles>", "Comma-separated roles (e.g., developer,reviewer)", "developer")
183
+ .option("-s, --status <status>", "Initial status (working|idle|offline)", "idle")
184
+ .action(async (name, options) => {
185
+ try {
186
+ await registerAgentCommand(name, {
187
+ type: options.type,
188
+ roles: options.roles ? options.roles.split(",").map((r) => r.trim()) : undefined,
189
+ status: options.status,
190
+ });
191
+ }
192
+ catch (error) {
193
+ console.error(chalk.red("Error:"), error.message);
194
+ process.exit(1);
195
+ }
196
+ });
197
+ agent
198
+ .command("list")
199
+ .description("List all registered agents")
200
+ .option("-s, --status <status>", "Filter by status (working|idle|offline)")
201
+ .option("-t, --type <type>", "Filter by type (human|bot)")
202
+ .option("-v, --verbose", "Show detailed agent information")
203
+ .action(async (options) => {
204
+ try {
205
+ await listAgentsCommand({
206
+ status: options.status,
207
+ type: options.type,
208
+ verbose: options.verbose,
209
+ });
210
+ }
211
+ catch (error) {
212
+ console.error(chalk.red("Error:"), error.message);
213
+ process.exit(1);
214
+ }
215
+ });
216
+ // List command
217
+ program
218
+ .command("list")
219
+ .description("List tasks with filtering")
220
+ .option("-s, --status <status>", "Filter by status (todo|in_progress|blocked|done)")
221
+ .option("-p, --priority <priority>", "Filter by priority (urgent|high|medium|low)")
222
+ .option("-a, --assigned-to <agent>", "Filter by assigned agent")
223
+ .option("-c, --claimed-by <agent>", "Filter by claiming agent")
224
+ .option("-t, --tag <tag>", "Filter by tag")
225
+ .option("-b, --blocked", "Show only blocked tasks")
226
+ .option("--json", "Output as JSON")
227
+ .action(async (options) => {
228
+ try {
229
+ await listCommand({
230
+ status: options.status,
231
+ priority: options.priority,
232
+ assignedTo: options.assignedTo,
233
+ claimedBy: options.claimedBy,
234
+ tag: options.tag,
235
+ blocked: options.blocked,
236
+ json: options.json,
237
+ });
238
+ }
239
+ catch (error) {
240
+ console.error(chalk.red("Error:"), error.message);
241
+ process.exit(1);
242
+ }
243
+ });
244
+ // Graph command
245
+ program
246
+ .command("graph")
247
+ .description("Visualize task dependencies")
248
+ .option("-f, --format <format>", "Output format (ascii|mermaid)", "ascii")
249
+ .option("--show-done", "Include completed tasks")
250
+ .action(async (options) => {
251
+ try {
252
+ await graphCommand({
253
+ format: options.format,
254
+ showDone: options.showDone,
255
+ });
256
+ }
257
+ catch (error) {
258
+ console.error(chalk.red("Error:"), error.message);
259
+ process.exit(1);
260
+ }
261
+ });
262
+ // Watch command
263
+ program
264
+ .command("watch")
265
+ .description("Watch TICK.md for changes in real-time")
266
+ .option("-i, --interval <seconds>", "Polling interval in seconds", "5")
267
+ .option("-f, --filter <status>", "Filter by status (todo|in_progress|blocked|done)")
268
+ .action(async (options) => {
269
+ try {
270
+ await watchCommand({
271
+ interval: parseInt(options.interval),
272
+ filter: options.filter,
273
+ });
274
+ }
275
+ catch (error) {
276
+ console.error(chalk.red("Error:"), error.message);
277
+ process.exit(1);
278
+ }
279
+ });
280
+ // Parse arguments
281
+ program.parse();
282
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { Priority } from "../types.js";
2
+ export interface AddOptions {
3
+ priority?: Priority;
4
+ tags?: string[];
5
+ assignedTo?: string;
6
+ dependsOn?: string[];
7
+ blocks?: string[];
8
+ description?: string;
9
+ estimatedHours?: number;
10
+ }
11
+ /**
12
+ * Add a new task to TICK.md
13
+ */
14
+ export declare function addCommand(title: string, options?: AddOptions): Promise<void>;
15
+ //# sourceMappingURL=add.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAQ,QAAQ,EAAc,MAAM,aAAa,CAAC;AAE9D,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CAwEf"}
@@ -0,0 +1,95 @@
1
+ import fs from "fs/promises";
2
+ import path from "path";
3
+ import { parseTickFile, serializeTickFile } from "../parser/index.js";
4
+ /**
5
+ * Add a new task to TICK.md
6
+ */
7
+ export async function addCommand(title, options = {}) {
8
+ const cwd = process.cwd();
9
+ const tickPath = path.join(cwd, "TICK.md");
10
+ // Check if TICK.md exists
11
+ try {
12
+ await fs.access(tickPath);
13
+ }
14
+ catch {
15
+ throw new Error("TICK.md not found. Run 'tick init' first to create a project.");
16
+ }
17
+ // Read and parse TICK.md
18
+ const content = await fs.readFile(tickPath, "utf-8");
19
+ const tickFile = parseTickFile(content);
20
+ // Generate new task ID
21
+ const taskId = `${tickFile.meta.id_prefix}-${String(tickFile.meta.next_id).padStart(3, "0")}`;
22
+ // Get creator from git or environment
23
+ const creator = await getCreator();
24
+ // Create new task
25
+ const now = new Date().toISOString();
26
+ const newTask = {
27
+ id: taskId,
28
+ title,
29
+ status: "backlog",
30
+ priority: options.priority || "medium",
31
+ assigned_to: options.assignedTo || null,
32
+ claimed_by: null,
33
+ created_by: creator,
34
+ created_at: now,
35
+ updated_at: now,
36
+ tags: options.tags || [],
37
+ depends_on: options.dependsOn || [],
38
+ blocks: options.blocks || [],
39
+ estimated_hours: options.estimatedHours,
40
+ description: options.description || "",
41
+ history: [
42
+ {
43
+ ts: now,
44
+ who: creator,
45
+ action: "created",
46
+ },
47
+ ],
48
+ };
49
+ // Add task to file
50
+ tickFile.tasks.push(newTask);
51
+ // Increment next_id
52
+ tickFile.meta.next_id++;
53
+ tickFile.meta.updated = now;
54
+ // Serialize and write
55
+ const newContent = serializeTickFile(tickFile);
56
+ await fs.writeFile(tickPath, newContent);
57
+ console.log(`✓ Created ${taskId}: ${title}`);
58
+ console.log(` Priority: ${newTask.priority}`);
59
+ if (newTask.tags.length > 0) {
60
+ console.log(` Tags: ${newTask.tags.join(", ")}`);
61
+ }
62
+ if (newTask.assigned_to) {
63
+ console.log(` Assigned to: ${newTask.assigned_to}`);
64
+ }
65
+ console.log("");
66
+ console.log("Next steps:");
67
+ console.log(` Claim task: tick claim ${taskId} @yourname`);
68
+ console.log(` View tasks: tick status`);
69
+ }
70
+ /**
71
+ * Get the creator name from git config or environment
72
+ */
73
+ async function getCreator() {
74
+ // Try git config
75
+ try {
76
+ const { execSync } = await import("child_process");
77
+ const gitName = execSync("git config user.name", {
78
+ encoding: "utf-8",
79
+ stdio: ["ignore", "pipe", "ignore"],
80
+ }).trim();
81
+ if (gitName) {
82
+ return `@${gitName.toLowerCase().replace(/\s+/g, "-")}`;
83
+ }
84
+ }
85
+ catch {
86
+ // Git not available or not configured
87
+ }
88
+ // Try environment variables
89
+ const envName = process.env.TICK_AGENT ||
90
+ process.env.USER ||
91
+ process.env.USERNAME ||
92
+ "unknown";
93
+ return `@${envName.toLowerCase()}`;
94
+ }
95
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { AgentStatus, AgentType } from "../types.js";
2
+ export interface AgentRegisterOptions {
3
+ type?: AgentType;
4
+ roles?: string[];
5
+ status?: AgentStatus;
6
+ }
7
+ export interface AgentListOptions {
8
+ status?: AgentStatus;
9
+ type?: AgentType;
10
+ verbose?: boolean;
11
+ }
12
+ /**
13
+ * Register a new agent in TICK.md
14
+ */
15
+ export declare function registerAgentCommand(name: string, options?: AgentRegisterOptions): Promise<void>;
16
+ /**
17
+ * List all agents in TICK.md
18
+ */
19
+ export declare function listAgentsCommand(options?: AgentListOptions): Promise<void>;
20
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAS,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC,CAmDf;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2FrF"}