@kynetic-ai/spec 0.4.0 → 0.6.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 (125) hide show
  1. package/dist/cli/commands/guard.d.ts +43 -0
  2. package/dist/cli/commands/guard.d.ts.map +1 -0
  3. package/dist/cli/commands/guard.js +200 -0
  4. package/dist/cli/commands/guard.js.map +1 -0
  5. package/dist/cli/commands/index.d.ts +1 -0
  6. package/dist/cli/commands/index.d.ts.map +1 -1
  7. package/dist/cli/commands/index.js +1 -0
  8. package/dist/cli/commands/index.js.map +1 -1
  9. package/dist/cli/commands/item.d.ts.map +1 -1
  10. package/dist/cli/commands/item.js +60 -23
  11. package/dist/cli/commands/item.js.map +1 -1
  12. package/dist/cli/commands/plan-import.js +51 -12
  13. package/dist/cli/commands/plan-import.js.map +1 -1
  14. package/dist/cli/commands/ralph.d.ts.map +1 -1
  15. package/dist/cli/commands/ralph.js +144 -329
  16. package/dist/cli/commands/ralph.js.map +1 -1
  17. package/dist/cli/commands/session/checkpoint.d.ts +19 -0
  18. package/dist/cli/commands/session/checkpoint.d.ts.map +1 -0
  19. package/dist/cli/commands/session/checkpoint.js +161 -0
  20. package/dist/cli/commands/session/checkpoint.js.map +1 -0
  21. package/dist/cli/commands/session/commands.d.ts +18 -0
  22. package/dist/cli/commands/session/commands.d.ts.map +1 -0
  23. package/dist/cli/commands/session/commands.js +259 -0
  24. package/dist/cli/commands/session/commands.js.map +1 -0
  25. package/dist/cli/commands/session/context.d.ts +17 -0
  26. package/dist/cli/commands/session/context.d.ts.map +1 -0
  27. package/dist/cli/commands/session/context.js +493 -0
  28. package/dist/cli/commands/session/context.js.map +1 -0
  29. package/dist/cli/commands/session/create.d.ts +29 -0
  30. package/dist/cli/commands/session/create.d.ts.map +1 -0
  31. package/dist/cli/commands/session/create.js +147 -0
  32. package/dist/cli/commands/session/create.js.map +1 -0
  33. package/dist/cli/commands/session/format.d.ts +27 -0
  34. package/dist/cli/commands/session/format.d.ts.map +1 -0
  35. package/dist/cli/commands/session/format.js +401 -0
  36. package/dist/cli/commands/session/format.js.map +1 -0
  37. package/dist/cli/commands/session/index.d.ts +13 -0
  38. package/dist/cli/commands/session/index.d.ts.map +1 -0
  39. package/dist/cli/commands/session/index.js +17 -0
  40. package/dist/cli/commands/session/index.js.map +1 -0
  41. package/dist/cli/commands/session/log.d.ts +52 -0
  42. package/dist/cli/commands/session/log.d.ts.map +1 -0
  43. package/dist/cli/commands/session/log.js +570 -0
  44. package/dist/cli/commands/session/log.js.map +1 -0
  45. package/dist/cli/commands/session/types.d.ts +230 -0
  46. package/dist/cli/commands/session/types.d.ts.map +1 -0
  47. package/dist/cli/commands/session/types.js +7 -0
  48. package/dist/cli/commands/session/types.js.map +1 -0
  49. package/dist/cli/commands/session.d.ts +4 -179
  50. package/dist/cli/commands/session.d.ts.map +1 -1
  51. package/dist/cli/commands/session.js +6 -1424
  52. package/dist/cli/commands/session.js.map +1 -1
  53. package/dist/cli/commands/setup.d.ts.map +1 -1
  54. package/dist/cli/commands/setup.js +69 -223
  55. package/dist/cli/commands/setup.js.map +1 -1
  56. package/dist/cli/commands/task.d.ts.map +1 -1
  57. package/dist/cli/commands/task.js +95 -37
  58. package/dist/cli/commands/task.js.map +1 -1
  59. package/dist/cli/commands/validate.d.ts.map +1 -1
  60. package/dist/cli/commands/validate.js +23 -7
  61. package/dist/cli/commands/validate.js.map +1 -1
  62. package/dist/cli/index.d.ts.map +1 -1
  63. package/dist/cli/index.js +2 -1
  64. package/dist/cli/index.js.map +1 -1
  65. package/dist/cli/output.d.ts.map +1 -1
  66. package/dist/cli/output.js +14 -2
  67. package/dist/cli/output.js.map +1 -1
  68. package/dist/parser/file-lock.d.ts +14 -0
  69. package/dist/parser/file-lock.d.ts.map +1 -0
  70. package/dist/parser/file-lock.js +124 -0
  71. package/dist/parser/file-lock.js.map +1 -0
  72. package/dist/parser/index.d.ts +1 -0
  73. package/dist/parser/index.d.ts.map +1 -1
  74. package/dist/parser/index.js +1 -0
  75. package/dist/parser/index.js.map +1 -1
  76. package/dist/parser/plan-document.d.ts +36 -0
  77. package/dist/parser/plan-document.d.ts.map +1 -1
  78. package/dist/parser/plan-document.js +75 -8
  79. package/dist/parser/plan-document.js.map +1 -1
  80. package/dist/parser/plans.d.ts.map +1 -1
  81. package/dist/parser/plans.js +28 -102
  82. package/dist/parser/plans.js.map +1 -1
  83. package/dist/parser/shadow.d.ts +5 -1
  84. package/dist/parser/shadow.d.ts.map +1 -1
  85. package/dist/parser/shadow.js +29 -17
  86. package/dist/parser/shadow.js.map +1 -1
  87. package/dist/parser/validate.d.ts +4 -1
  88. package/dist/parser/validate.d.ts.map +1 -1
  89. package/dist/parser/validate.js +50 -35
  90. package/dist/parser/validate.js.map +1 -1
  91. package/dist/parser/yaml.d.ts.map +1 -1
  92. package/dist/parser/yaml.js +322 -297
  93. package/dist/parser/yaml.js.map +1 -1
  94. package/dist/schema/task.d.ts +22 -0
  95. package/dist/schema/task.d.ts.map +1 -1
  96. package/dist/schema/task.js +7 -0
  97. package/dist/schema/task.js.map +1 -1
  98. package/dist/sessions/store.d.ts +254 -1
  99. package/dist/sessions/store.d.ts.map +1 -1
  100. package/dist/sessions/store.js +621 -1
  101. package/dist/sessions/store.js.map +1 -1
  102. package/dist/sessions/types.d.ts +51 -2
  103. package/dist/sessions/types.d.ts.map +1 -1
  104. package/dist/sessions/types.js +25 -0
  105. package/dist/sessions/types.js.map +1 -1
  106. package/dist/strings/labels.d.ts +2 -0
  107. package/dist/strings/labels.d.ts.map +1 -1
  108. package/dist/strings/labels.js +2 -0
  109. package/dist/strings/labels.js.map +1 -1
  110. package/dist/utils/git.d.ts +2 -0
  111. package/dist/utils/git.d.ts.map +1 -1
  112. package/dist/utils/git.js +21 -5
  113. package/dist/utils/git.js.map +1 -1
  114. package/package.json +4 -1
  115. package/plugin/.claude-plugin/marketplace.json +1 -1
  116. package/plugin/.claude-plugin/plugin.json +1 -1
  117. package/plugin/plugins/kspec/skills/review/SKILL.md +37 -0
  118. package/plugin/plugins/kspec/skills/task-work/SKILL.md +16 -0
  119. package/plugin/plugins/kspec/skills/triage-inbox/SKILL.md +1 -1
  120. package/plugin/plugins/kspec/skills/writing-specs/SKILL.md +14 -0
  121. package/templates/agents-sections/05-commit-convention.md +14 -0
  122. package/templates/skills/review/SKILL.md +37 -0
  123. package/templates/skills/task-work/SKILL.md +16 -0
  124. package/templates/skills/triage-inbox/SKILL.md +1 -1
  125. package/templates/skills/writing-specs/SKILL.md +14 -0
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Session create action and environment injection.
3
+ *
4
+ * Creates new sessions with optional budget and injects session ID into agent environments.
5
+ */
6
+ import { initContext, } from "../../../parser/index.js";
7
+ import { createSessionWithBudget, validateSessionId, injectClaudeCodeEnv, injectCodexEnv, injectGeminiEnv, injectOpenCodeEnv, getFallbackInjectionInstructions, } from "../../../sessions/store.js";
8
+ import { ulid } from "ulid";
9
+ import { EXIT_CODES } from "../../exit-codes.js";
10
+ import { error, info, output, success, warn } from "../../output.js";
11
+ /**
12
+ * Detect agent harness and perform environment injection.
13
+ *
14
+ * AC: @session-creation-and-env-injection ac-inject-claude
15
+ * AC: @session-creation-and-env-injection ac-inject-codex
16
+ * AC: @session-creation-and-env-injection ac-inject-fallback
17
+ */
18
+ async function performEnvInjection(sessionId) {
19
+ // Detect Claude Code
20
+ if (process.env.CLAUDECODE === "1" ||
21
+ process.env.CLAUDE_CODE_ENTRYPOINT ||
22
+ process.env.CLAUDE_PROJECT_DIR) {
23
+ return injectClaudeCodeEnv(sessionId);
24
+ }
25
+ // Detect Codex CLI
26
+ if (process.env.CODEX_SANDBOX) {
27
+ return injectCodexEnv(sessionId);
28
+ }
29
+ // Detect Gemini CLI
30
+ if (process.env.GEMINI_CLI === "1") {
31
+ return injectGeminiEnv(sessionId);
32
+ }
33
+ // Detect OpenCode
34
+ if (process.env.OPENCODE_CONFIG_DIR || process.env.OPENCODE_CONFIG) {
35
+ return injectOpenCodeEnv(sessionId);
36
+ }
37
+ // Fallback for unknown harnesses
38
+ return getFallbackInjectionInstructions(sessionId);
39
+ }
40
+ /**
41
+ * Action handler for `kspec session create`.
42
+ *
43
+ * Creates a new session with optional budget and environment injection.
44
+ *
45
+ * AC: @session-creation-and-env-injection ac-create
46
+ * AC: @session-creation-and-env-injection ac-budget
47
+ * AC: @session-creation-and-env-injection ac-budget-local
48
+ * AC: @session-creation-and-env-injection ac-inject-claude
49
+ * AC: @session-creation-and-env-injection ac-inject-codex
50
+ * AC: @session-creation-and-env-injection ac-inject-fallback
51
+ *
52
+ * Exit codes documented per @trait-semantic-exit-codes ac-8:
53
+ * - 0: Session created successfully
54
+ * - 1: Validation error (invalid budget value)
55
+ * - 3: Runtime error (filesystem failure)
56
+ */
57
+ export async function sessionCreateAction(options) {
58
+ try {
59
+ const ctx = await initContext();
60
+ // AC: @session-creation-and-env-injection ac-invalid-session
61
+ // Validate existing KSPEC_SESSION_ID if set — warn user if it's stale/corrupt
62
+ const existingSessionId = process.env.KSPEC_SESSION_ID;
63
+ if (existingSessionId) {
64
+ const validation = await validateSessionId(ctx.specDir, existingSessionId);
65
+ if (!validation.valid) {
66
+ warn(`Current KSPEC_SESSION_ID (${existingSessionId}) is invalid: ${validation.error}`);
67
+ info(validation.suggestion || "Creating a new session will generate a fresh ID.");
68
+ }
69
+ }
70
+ // Validate budget if provided
71
+ // AC: @trait-error-guidance ac-5 - indicate which field/value failed
72
+ let budgetNum;
73
+ if (options.budget !== undefined) {
74
+ // Use Number() instead of parseInt to reject "3.5", "3abc", "1e2" etc.
75
+ budgetNum = Number(options.budget);
76
+ if (isNaN(budgetNum) || budgetNum <= 0 || !Number.isInteger(budgetNum) || !/^\d+$/.test(options.budget)) {
77
+ // AC: @trait-error-guidance ac-2, ac-5 - include suggested action and field info
78
+ // AC: @trait-error-guidance ac-6 - guidance included in structured error
79
+ error(`Invalid budget value: "${options.budget}". Must be a positive integer.`, { suggestion: "Usage: kspec session create --budget <positive-integer>" });
80
+ process.exit(EXIT_CODES.USAGE_ERROR);
81
+ }
82
+ }
83
+ // Generate session ID
84
+ const sessionId = ulid();
85
+ // AC: @session-creation-and-env-injection ac-create, ac-budget, ac-budget-local
86
+ const result = await createSessionWithBudget(ctx.specDir, {
87
+ id: sessionId,
88
+ agent_type: options.agentType,
89
+ task_id: options.taskId,
90
+ budget: budgetNum,
91
+ });
92
+ // Handle environment injection if requested
93
+ let injection = null;
94
+ if (options.inject) {
95
+ injection = await performEnvInjection(sessionId);
96
+ }
97
+ // Build output data
98
+ const outputData = {
99
+ session_id: result.session_id,
100
+ agent_type: result.session.agent_type,
101
+ status: result.session.status,
102
+ started_at: result.session.started_at,
103
+ };
104
+ if (result.session.task_id) {
105
+ outputData.task_id = result.session.task_id;
106
+ }
107
+ if (result.budget) {
108
+ outputData.budget = {
109
+ max_per_cycle: result.budget.max_per_cycle,
110
+ started_this_cycle: result.budget.started_this_cycle,
111
+ };
112
+ }
113
+ if (injection) {
114
+ outputData.env_injection = {
115
+ method: injection.method,
116
+ injected: injection.injected,
117
+ description: injection.description,
118
+ ...(injection.path ? { path: injection.path } : {}),
119
+ };
120
+ }
121
+ // AC: @trait-json-output ac-1, ac-2, ac-5 - JSON with all data, ISO timestamps
122
+ output(outputData, () => {
123
+ // AC: @session-creation-and-env-injection ac-create - print session ID to stdout
124
+ success(`Created session: ${sessionId}`, { session_id: sessionId });
125
+ info(`Agent type: ${options.agentType}`);
126
+ if (result.budget) {
127
+ info(`Budget: ${result.budget.max_per_cycle} tasks per cycle`);
128
+ }
129
+ if (injection) {
130
+ if (injection.injected) {
131
+ info(injection.description);
132
+ }
133
+ else {
134
+ // AC: @session-creation-and-env-injection ac-inject-fallback
135
+ console.log(injection.description);
136
+ }
137
+ }
138
+ });
139
+ }
140
+ catch (err) {
141
+ // AC: @trait-error-guidance ac-1 - describe what went wrong
142
+ // AC: @trait-json-output ac-3 - error as JSON object
143
+ error("Failed to create session", err);
144
+ process.exit(EXIT_CODES.ERROR);
145
+ }
146
+ }
147
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../src/cli/commands/session/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Session human output formatting.
3
+ *
4
+ * Formats session context and checkpoint results for human-readable CLI output.
5
+ */
6
+ import chalk from "chalk";
7
+ import type { CheckpointResult, SessionStartContext, SessionOptions } from "./types.js";
8
+ /**
9
+ * Display ref as @slug when available, @short-ulid when not.
10
+ * AC: @cmd-session-start ac-slug-display, ac-slug-fallback
11
+ */
12
+ export declare function getDisplayRef(item: {
13
+ ref: string;
14
+ slug?: string | null;
15
+ }): string;
16
+ /**
17
+ * Format priority with color coding.
18
+ * P1-P2: red (high priority), P3+: gray.
19
+ */
20
+ export declare function formatPriority(level: number): string;
21
+ /**
22
+ * Format task status with color coding.
23
+ */
24
+ export declare function statusColor(status: string): ReturnType<typeof chalk.red>;
25
+ export declare function formatCheckpointResult(result: CheckpointResult): void;
26
+ export declare function formatSessionContext(ctx: SessionStartContext, options: SessionOptions): void;
27
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/session/format.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,KAAK,EACV,gBAAgB,EAIhB,mBAAmB,EACnB,cAAc,EACf,MAAM,YAAY,CAAC;AAIpB;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,MAAM,CAEjF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIpD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,CAexE;AAmCD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAwBrE;AAID,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,mBAAmB,EACxB,OAAO,EAAE,cAAc,GACtB,IAAI,CAsTN"}
@@ -0,0 +1,401 @@
1
+ /**
2
+ * Session human output formatting.
3
+ *
4
+ * Formats session context and checkpoint results for human-readable CLI output.
5
+ */
6
+ import chalk from "chalk";
7
+ import { formatRelativeTime } from "../../../utils/index.js";
8
+ import { hints, sessionHeaders, } from "../../../strings/index.js";
9
+ // ─── Shared Formatting Helpers ──────────────────────────────────────────────
10
+ /**
11
+ * Display ref as @slug when available, @short-ulid when not.
12
+ * AC: @cmd-session-start ac-slug-display, ac-slug-fallback
13
+ */
14
+ export function getDisplayRef(item) {
15
+ return item.slug ? `@${item.slug}` : `@${item.ref}`;
16
+ }
17
+ /**
18
+ * Format priority with color coding.
19
+ * P1-P2: red (high priority), P3+: gray.
20
+ */
21
+ export function formatPriority(level) {
22
+ return level <= 2
23
+ ? chalk.red(`P${level}`)
24
+ : chalk.gray(`P${level}`);
25
+ }
26
+ /**
27
+ * Format task status with color coding.
28
+ */
29
+ export function statusColor(status) {
30
+ switch (status) {
31
+ case "in_progress":
32
+ return chalk.blue("[in_progress]");
33
+ case "needs_work":
34
+ return chalk.red("[needs_work]");
35
+ case "pending_review":
36
+ return chalk.yellow("[pending_review]");
37
+ case "blocked":
38
+ return chalk.red("[blocked]");
39
+ case "completed":
40
+ return chalk.green("[completed]");
41
+ default:
42
+ return chalk.gray(`[${status}]`);
43
+ }
44
+ }
45
+ /**
46
+ * Format an inline note for display under a task entry.
47
+ */
48
+ function formatInlineNote(note, isFull) {
49
+ const noteAge = formatRelativeTime(new Date(note.created_at));
50
+ const author = note.author
51
+ ? chalk.gray(` by ${note.author}`)
52
+ : "";
53
+ console.log(` ${chalk.yellow("Note")} ${chalk.gray(`(${noteAge}${author})`)}`);
54
+ let content = note.content.trim();
55
+ if (!isFull && content.length > 200) {
56
+ content = `${content.slice(0, 200).trim()}...`;
57
+ }
58
+ const lines = content.split("\n");
59
+ const maxLines = isFull ? lines.length : 3;
60
+ for (const line of lines.slice(0, maxLines)) {
61
+ console.log(` ${chalk.white(line)}`);
62
+ }
63
+ if (!isFull && lines.length > maxLines) {
64
+ console.log(chalk.gray(` ... (${lines.length - maxLines} more lines)`));
65
+ }
66
+ }
67
+ // ─── Checkpoint Formatting ──────────────────────────────────────────────────
68
+ export function formatCheckpointResult(result) {
69
+ if (result.ok) {
70
+ console.log(chalk.green(result.message));
71
+ }
72
+ else {
73
+ console.log(chalk.yellow(result.message));
74
+ console.log("");
75
+ for (const issue of result.issues) {
76
+ const icon = issue.type === "uncommitted_changes"
77
+ ? chalk.yellow("⚠")
78
+ : issue.type === "in_progress_task"
79
+ ? chalk.blue("●")
80
+ : chalk.gray("○");
81
+ console.log(` ${icon} ${issue.description}`);
82
+ }
83
+ if (result.instructions.length > 0) {
84
+ console.log("");
85
+ for (const instruction of result.instructions) {
86
+ console.log(chalk.gray(instruction));
87
+ }
88
+ }
89
+ }
90
+ }
91
+ // ─── Session Context Formatting ─────────────────────────────────────────────
92
+ export function formatSessionContext(ctx, options) {
93
+ const isFull = !!options.full;
94
+ // Header
95
+ console.log(`\n${sessionHeaders.title}`);
96
+ const age = formatRelativeTime(new Date(ctx.generated_at));
97
+ if (ctx.branch) {
98
+ console.log(chalk.gray(`Branch: ${ctx.branch} | Generated: ${age}`));
99
+ }
100
+ else {
101
+ console.log(chalk.gray(`Generated: ${age}`));
102
+ }
103
+ // Stats summary
104
+ const pendingReviewNote = ctx.stats.pending_review > 0
105
+ ? `${ctx.stats.pending_review} awaiting review, `
106
+ : "";
107
+ const inboxNote = ctx.stats.inbox_items > 0 ? ` | Inbox: ${ctx.stats.inbox_items}` : "";
108
+ console.log(chalk.gray(`Tasks: ${ctx.stats.in_progress} active, ${pendingReviewNote}${ctx.stats.ready} ready, ` +
109
+ `${ctx.stats.blocked} blocked, ${ctx.stats.completed}/${ctx.stats.total_tasks} completed${inboxNote}`));
110
+ // Session context section (focus, threads, questions)
111
+ if (ctx.context &&
112
+ (ctx.context.focus ||
113
+ ctx.context.threads.length > 0 ||
114
+ ctx.context.open_questions.length > 0)) {
115
+ console.log("\n--- Session Context ---");
116
+ if (ctx.context.focus) {
117
+ console.log(` ${chalk.cyan("Focus:")} ${ctx.context.focus}`);
118
+ }
119
+ if (ctx.context.threads.length > 0) {
120
+ console.log(` ${chalk.cyan("Active Threads:")}`);
121
+ for (const thread of ctx.context.threads) {
122
+ console.log(` - ${thread}`);
123
+ }
124
+ }
125
+ if (ctx.context.open_questions.length > 0) {
126
+ console.log(` ${chalk.cyan("Open Questions:")}`);
127
+ for (const question of ctx.context.open_questions) {
128
+ console.log(` - ${question}`);
129
+ }
130
+ }
131
+ }
132
+ // ── Section ordering per AC: @cmd-session-start ac-section-order ──
133
+ // active tasks → pending review → blocked → ready → recent activity → inbox → working tree → quick commands
134
+ // AC: @cmd-session-start ac-empty-skip — empty sections omitted entirely
135
+ // ── Active tasks section ──
136
+ // AC: @cmd-session-start ac-active-detail, ac-needs-work-indicator
137
+ if (ctx.active_tasks.length > 0) {
138
+ console.log(`\n${sessionHeaders.activeWork}`);
139
+ // Collect notes relevant to active tasks for inline display
140
+ const activeTaskNotes = ctx.recent_notes.filter((n) => n.task_status === "in_progress" || n.task_status === "needs_work");
141
+ for (const task of ctx.active_tasks) {
142
+ const started = task.started_at
143
+ ? chalk.gray(` (started ${formatRelativeTime(new Date(task.started_at))})`)
144
+ : "";
145
+ // AC: @cmd-session-start ac-needs-work-indicator
146
+ const statusLabel = statusColor(task.status);
147
+ console.log(` ${statusLabel} ${formatPriority(task.priority)} ${getDisplayRef(task)} ${task.title}${started}`);
148
+ // AC: @cmd-session-start ac-active-detail — show description
149
+ if (task.description) {
150
+ console.log(chalk.gray(` ${task.description}`));
151
+ }
152
+ // AC: @cmd-session-start ac-active-detail — show recent notes inline
153
+ const taskNotes = activeTaskNotes.filter((n) => n.task_ref === task.ref);
154
+ if (taskNotes.length > 0) {
155
+ formatInlineNote(taskNotes[0], isFull); // already sorted most recent first
156
+ }
157
+ }
158
+ }
159
+ // ── Awaiting review section ──
160
+ // AC: @cmd-session-start ac-review-detail
161
+ if (ctx.pending_review_tasks.length > 0) {
162
+ console.log(`\n${sessionHeaders.awaitingReview}`);
163
+ const reviewNotes = ctx.recent_notes.filter((n) => n.task_status === "pending_review");
164
+ for (const task of ctx.pending_review_tasks) {
165
+ console.log(` ${chalk.yellow("[pending_review]")} ${formatPriority(task.priority)} ${getDisplayRef(task)} ${task.title}`);
166
+ // AC: @cmd-session-start ac-review-detail — show recent notes
167
+ const taskNotes = reviewNotes.filter((n) => n.task_ref === task.ref);
168
+ if (taskNotes.length > 0) {
169
+ formatInlineNote(taskNotes[0], isFull);
170
+ }
171
+ }
172
+ }
173
+ // ── Blocked tasks section ──
174
+ if (ctx.blocked_tasks.length > 0) {
175
+ console.log(`\n${sessionHeaders.blocked}`);
176
+ for (const task of ctx.blocked_tasks) {
177
+ const unlocks = task.unlocks > 0 ? chalk.green(` unlocks ${task.unlocks}`) : "";
178
+ console.log(` ${chalk.red("[blocked]")} ${getDisplayRef(task)} ${task.title}${unlocks}`);
179
+ if (task.blocked_by.length > 0) {
180
+ console.log(chalk.gray(` Blockers: ${task.blocked_by.join(", ")}`));
181
+ }
182
+ if (task.unmet_deps.length > 0) {
183
+ console.log(chalk.gray(` Waiting on: ${task.unmet_deps.join(", ")}`));
184
+ }
185
+ }
186
+ }
187
+ // ── Ready tasks section ──
188
+ if (ctx.ready_tasks.length > 0) {
189
+ console.log(`\n${sessionHeaders.readyTasks}`);
190
+ for (const task of ctx.ready_tasks) {
191
+ const tags = task.tags.length > 0 ? chalk.cyan(` #${task.tags.join(" #")}`) : "";
192
+ const unlocks = task.unlocks > 0 ? chalk.green(` unlocks ${task.unlocks}`) : "";
193
+ console.log(` ${formatPriority(task.priority)} ${getDisplayRef(task)} ${task.title}${unlocks}${tags}`);
194
+ }
195
+ }
196
+ // ── Recent Activity timeline ──
197
+ // AC: @session-start-activity-timeline ac-activity-merge
198
+ if (ctx.activity_timeline.length > 0) {
199
+ formatActivityTimeline(ctx.activity_timeline, isFull);
200
+ }
201
+ // ── Inbox section ──
202
+ // AC: @session-start-inbox-triage ac-inbox-stat-line, ac-inbox-full-list, ac-inbox-all-triaged
203
+ if (ctx.inbox_stats.total > 0) {
204
+ console.log(`\n${sessionHeaders.inbox}`);
205
+ // Stat line always shown (primer and full)
206
+ const statParts = [
207
+ `${ctx.inbox_stats.untriaged} untriaged`,
208
+ `${ctx.inbox_stats.deferred} deferred`,
209
+ `${ctx.inbox_stats.total} total`,
210
+ ];
211
+ console.log(` ${statParts.join(" | ")}`);
212
+ // AC: @cmd-session-start ac-full-sections, @session-start-inbox-triage ac-inbox-full-list
213
+ // Full mode: list untriaged items (up to 20)
214
+ // AC: @cmd-session-start ac-slug-fallback — inbox uses @short-ulid
215
+ const untriagedItems = ctx.inbox_items
216
+ .filter((i) => !i.triaged)
217
+ .slice(0, 20);
218
+ if (isFull && untriagedItems.length > 0) {
219
+ console.log("");
220
+ for (const item of untriagedItems) {
221
+ const itemAge = formatRelativeTime(new Date(item.created_at));
222
+ const author = item.added_by ? ` by ${item.added_by}` : "";
223
+ const tags = item.tags.length > 0
224
+ ? chalk.cyan(` [${item.tags.join(", ")}]`)
225
+ : "";
226
+ console.log(` ${chalk.magenta(`@${item.ref}`)} ${chalk.gray(`(${itemAge}${author})`)}${tags}`);
227
+ console.log(` ${item.text}`);
228
+ }
229
+ }
230
+ if (ctx.inbox_stats.untriaged > 0) {
231
+ console.log(` ${hints.inboxTriage}`);
232
+ }
233
+ }
234
+ // ── Observations section (full mode only) ──
235
+ // AC: @cmd-session-start ac-full-sections
236
+ if (isFull && ctx.observations.length > 0) {
237
+ console.log(`\n${chalk.yellow.bold("--- Observations (unresolved) ---")}`);
238
+ for (const obs of ctx.observations) {
239
+ const obsAge = formatRelativeTime(new Date(obs.created_at));
240
+ const author = obs.author ? ` by ${obs.author}` : "";
241
+ const typeLabel = chalk.cyan(`[${obs.type}]`);
242
+ console.log(` ${typeLabel} ${chalk.gray(`@${obs.ref}`)} ${chalk.gray(`(${obsAge}${author})`)}`);
243
+ console.log(` ${obs.content}`);
244
+ }
245
+ }
246
+ // ── Session metadata section (full mode only) ──
247
+ // AC: @cmd-session-start ac-full-sections
248
+ if (isFull &&
249
+ ctx.context &&
250
+ ctx.context.updated_at) {
251
+ console.log(`\n${chalk.gray.bold("--- Session Metadata ---")}`);
252
+ console.log(chalk.gray(` Last updated: ${formatRelativeTime(new Date(ctx.context.updated_at))}`));
253
+ }
254
+ // ── Working tree section ──
255
+ // AC: @cmd-session-start ac-dirty-tree-only — only shown when dirty
256
+ if (ctx.working_tree && !ctx.working_tree.clean) {
257
+ console.log(`\n${sessionHeaders.workingTree}`);
258
+ if (ctx.working_tree.staged.length > 0) {
259
+ console.log(chalk.green(" Staged:"));
260
+ for (const file of ctx.working_tree.staged) {
261
+ console.log(` ${chalk.green(file.status[0].toUpperCase())} ${file.path}`);
262
+ }
263
+ }
264
+ if (ctx.working_tree.unstaged.length > 0) {
265
+ console.log(chalk.red(" Modified:"));
266
+ for (const file of ctx.working_tree.unstaged) {
267
+ console.log(` ${chalk.red(file.status[0].toUpperCase())} ${file.path}`);
268
+ }
269
+ }
270
+ if (ctx.working_tree.untracked.length > 0) {
271
+ console.log(chalk.gray(" Untracked:"));
272
+ const untrackedLimit = isFull
273
+ ? ctx.working_tree.untracked.length
274
+ : 5;
275
+ for (const filePath of ctx.working_tree.untracked.slice(0, untrackedLimit)) {
276
+ console.log(` ${chalk.gray("?")} ${filePath}`);
277
+ }
278
+ if (!isFull && ctx.working_tree.untracked.length > untrackedLimit) {
279
+ console.log(chalk.gray(` ... and ${ctx.working_tree.untracked.length - untrackedLimit} more`));
280
+ }
281
+ }
282
+ }
283
+ // ── Quick Commands section ──
284
+ const quickCommands = [];
285
+ if (ctx.active_tasks.length > 0) {
286
+ const ref = getDisplayRef(ctx.active_tasks[0]);
287
+ quickCommands.push(`kspec task note ${ref} "Progress..." ${chalk.gray("# document work")}`);
288
+ quickCommands.push(`kspec task submit ${ref} ${chalk.gray("# submit for review")}`);
289
+ }
290
+ else if (ctx.ready_tasks.length > 0) {
291
+ const ref = getDisplayRef(ctx.ready_tasks[0]);
292
+ quickCommands.push(`kspec task start ${ref} ${chalk.gray("# begin work")}`);
293
+ }
294
+ if (ctx.inbox_stats.untriaged > 0) {
295
+ quickCommands.push(`kspec triage inbox ${chalk.gray("# triage untriaged inbox items")}`);
296
+ }
297
+ if (ctx.working_tree && !ctx.working_tree.clean) {
298
+ quickCommands.push(`git add . && git commit -m "..." ${chalk.gray("# commit changes")}`);
299
+ }
300
+ if (quickCommands.length > 0) {
301
+ console.log(`\n${sessionHeaders.quickCommands}`);
302
+ for (const hint of quickCommands) {
303
+ console.log(` ${hint}`);
304
+ }
305
+ }
306
+ console.log(""); // Final newline
307
+ }
308
+ // ─── Activity Timeline Formatting ───────────────────────────────────────────
309
+ /**
310
+ * Format the activity timeline section with hierarchical grouping.
311
+ * AC: @session-start-activity-timeline ac-activity-hierarchy, ac-activity-dedup
312
+ */
313
+ function formatActivityTimeline(timeline, isFull) {
314
+ console.log(`\n${sessionHeaders.recentActivity}`);
315
+ const observationPromotedTasks = [];
316
+ const taskGroups = new Map();
317
+ const groups = [];
318
+ for (const item of timeline) {
319
+ if (item.type === "linked_commit") {
320
+ const key = item.task.ref;
321
+ let group = taskGroups.get(key);
322
+ if (!group) {
323
+ group = { task: item.task, commits: [], sortDate: item.date };
324
+ taskGroups.set(key, group);
325
+ }
326
+ group.commits.push({ commit: item.commit, date: item.commit.date });
327
+ // Update sortDate to the most recent event in the group
328
+ if (new Date(item.date).getTime() > new Date(group.sortDate).getTime()) {
329
+ group.sortDate = item.date;
330
+ }
331
+ }
332
+ else if (item.type === "task_completion") {
333
+ groups.push({ kind: "task_completion", task: item.task, date: item.date });
334
+ }
335
+ else if (item.type === "commit") {
336
+ groups.push({ kind: "orphan_commit", commit: item.commit, date: item.date });
337
+ }
338
+ }
339
+ // Add task groups to the groups array
340
+ for (const group of taskGroups.values()) {
341
+ // AC: @session-start-activity-timeline ac-activity-sort
342
+ // Sort commits within a group chronologically (oldest first)
343
+ group.commits.sort((a, b) => new Date(a.date).getTime() - new Date(b.date).getTime());
344
+ groups.push({ kind: "task_group", ...group });
345
+ }
346
+ // AC: @session-start-activity-timeline ac-activity-sort
347
+ // Sort groups by most recent event, most recent first
348
+ groups.sort((a, b) => new Date(b.kind === "task_group" ? b.sortDate : b.date).getTime() -
349
+ new Date(a.kind === "task_group" ? a.sortDate : a.date).getTime());
350
+ for (const group of groups) {
351
+ if (group.kind === "task_completion") {
352
+ // Standalone completed task (not linked to any commit)
353
+ let reason = "";
354
+ if (group.task.closed_reason) {
355
+ const maxLen = isFull ? 120 : 60;
356
+ const truncated = group.task.closed_reason.length > maxLen
357
+ ? `${group.task.closed_reason.slice(0, maxLen).trim()}...`
358
+ : group.task.closed_reason;
359
+ reason = chalk.gray(` - ${truncated}`);
360
+ }
361
+ // AC: @cmd-session-start ac-slug-display
362
+ const taskDisplay = getDisplayRef(group.task);
363
+ // AC: @cmd-session-start ac-relative-time-human
364
+ const itemAge = formatRelativeTime(new Date(group.date));
365
+ console.log(` ${chalk.green("✓")} ${taskDisplay} ${group.task.title} ${chalk.gray(`(${itemAge})`)}${reason}`);
366
+ if (group.task.origin === "observation_promotion") {
367
+ observationPromotedTasks.push(taskDisplay);
368
+ }
369
+ }
370
+ else if (group.kind === "task_group") {
371
+ // AC: @session-start-activity-timeline ac-activity-hierarchy, ac-activity-trailer-link
372
+ // Task as top-level entry with linked commits nested beneath
373
+ const taskDisplay = getDisplayRef(group.task);
374
+ const groupAge = formatRelativeTime(new Date(group.sortDate));
375
+ console.log(` ${chalk.green("✓")} ${taskDisplay} ${group.task.title} ${chalk.gray(`(${groupAge})`)}`);
376
+ if (group.task.origin === "observation_promotion") {
377
+ observationPromotedTasks.push(taskDisplay);
378
+ }
379
+ // Render nested commits with visual connectors
380
+ for (let i = 0; i < group.commits.length; i++) {
381
+ const { commit, date } = group.commits[i];
382
+ const isLast = i === group.commits.length - 1;
383
+ const connector = isLast ? "└─" : "├─";
384
+ const commitAge = formatRelativeTime(new Date(date));
385
+ console.log(` ${chalk.gray(connector)} ${chalk.yellow(commit.hash)} ${commit.message} ${chalk.gray(`(${commitAge}, ${commit.author})`)}`);
386
+ }
387
+ }
388
+ else if (group.kind === "orphan_commit") {
389
+ // AC: @session-start-activity-timeline ac-activity-orphan
390
+ // Orphan commit: visually distinct from task entries
391
+ const commitAge = formatRelativeTime(new Date(group.date));
392
+ console.log(` ${chalk.gray("○")} ${chalk.yellow(group.commit.hash)} ${group.commit.message} ${chalk.gray(`(${commitAge}, ${group.commit.author})`)}`);
393
+ }
394
+ }
395
+ // Show reminder about resolving observations
396
+ if (observationPromotedTasks.length > 0) {
397
+ console.log(chalk.yellow(`\n ℹ Consider resolving linked observations: ${observationPromotedTasks.join(", ")}`));
398
+ console.log(chalk.gray(` Run: kspec meta observations --pending-resolution`));
399
+ }
400
+ }
401
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../../src/cli/commands/session/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Session command module barrel.
3
+ *
4
+ * Re-exports public API from sub-modules. The registerSessionCommands function
5
+ * wires everything up with commander.
6
+ */
7
+ export type { ActiveTaskSummary, ActivityItem, BlockedTaskSummary, CheckpointIssue, CheckpointOptions, CheckpointResult, CommitSummary, CompletedTaskSummary, InboxStats, InboxSummary, IterationStats, NoteSummary, ObservationSummary, ReadyTaskSummary, SessionStartContext, SessionContextComputed, SessionOptions, SessionStats, StopHookInput, TodoSummary, } from "./types.js";
8
+ export { gatherSessionContext, getIterationStats } from "./context.js";
9
+ export { performCheckpoint } from "./checkpoint.js";
10
+ export { getDisplayRef, formatPriority, statusColor } from "./format.js";
11
+ export { parseHookInput } from "./commands.js";
12
+ export { registerSessionCommands } from "./commands.js";
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/session/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACV,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,oBAAoB,EACpB,UAAU,EACV,YAAY,EACZ,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,YAAY,EACZ,aAAa,EACb,WAAW,GACZ,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGpD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAGzE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC"}