@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.
- package/dist/cli/commands/guard.d.ts +43 -0
- package/dist/cli/commands/guard.d.ts.map +1 -0
- package/dist/cli/commands/guard.js +200 -0
- package/dist/cli/commands/guard.js.map +1 -0
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +1 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/item.d.ts.map +1 -1
- package/dist/cli/commands/item.js +60 -23
- package/dist/cli/commands/item.js.map +1 -1
- package/dist/cli/commands/plan-import.js +51 -12
- package/dist/cli/commands/plan-import.js.map +1 -1
- package/dist/cli/commands/ralph.d.ts.map +1 -1
- package/dist/cli/commands/ralph.js +144 -329
- package/dist/cli/commands/ralph.js.map +1 -1
- package/dist/cli/commands/session/checkpoint.d.ts +19 -0
- package/dist/cli/commands/session/checkpoint.d.ts.map +1 -0
- package/dist/cli/commands/session/checkpoint.js +161 -0
- package/dist/cli/commands/session/checkpoint.js.map +1 -0
- package/dist/cli/commands/session/commands.d.ts +18 -0
- package/dist/cli/commands/session/commands.d.ts.map +1 -0
- package/dist/cli/commands/session/commands.js +259 -0
- package/dist/cli/commands/session/commands.js.map +1 -0
- package/dist/cli/commands/session/context.d.ts +17 -0
- package/dist/cli/commands/session/context.d.ts.map +1 -0
- package/dist/cli/commands/session/context.js +493 -0
- package/dist/cli/commands/session/context.js.map +1 -0
- package/dist/cli/commands/session/create.d.ts +29 -0
- package/dist/cli/commands/session/create.d.ts.map +1 -0
- package/dist/cli/commands/session/create.js +147 -0
- package/dist/cli/commands/session/create.js.map +1 -0
- package/dist/cli/commands/session/format.d.ts +27 -0
- package/dist/cli/commands/session/format.d.ts.map +1 -0
- package/dist/cli/commands/session/format.js +401 -0
- package/dist/cli/commands/session/format.js.map +1 -0
- package/dist/cli/commands/session/index.d.ts +13 -0
- package/dist/cli/commands/session/index.d.ts.map +1 -0
- package/dist/cli/commands/session/index.js +17 -0
- package/dist/cli/commands/session/index.js.map +1 -0
- package/dist/cli/commands/session/log.d.ts +52 -0
- package/dist/cli/commands/session/log.d.ts.map +1 -0
- package/dist/cli/commands/session/log.js +570 -0
- package/dist/cli/commands/session/log.js.map +1 -0
- package/dist/cli/commands/session/types.d.ts +230 -0
- package/dist/cli/commands/session/types.d.ts.map +1 -0
- package/dist/cli/commands/session/types.js +7 -0
- package/dist/cli/commands/session/types.js.map +1 -0
- package/dist/cli/commands/session.d.ts +4 -179
- package/dist/cli/commands/session.d.ts.map +1 -1
- package/dist/cli/commands/session.js +6 -1424
- package/dist/cli/commands/session.js.map +1 -1
- package/dist/cli/commands/setup.d.ts.map +1 -1
- package/dist/cli/commands/setup.js +69 -223
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/task.d.ts.map +1 -1
- package/dist/cli/commands/task.js +95 -37
- package/dist/cli/commands/task.js.map +1 -1
- package/dist/cli/commands/validate.d.ts.map +1 -1
- package/dist/cli/commands/validate.js +23 -7
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +14 -2
- package/dist/cli/output.js.map +1 -1
- package/dist/parser/file-lock.d.ts +14 -0
- package/dist/parser/file-lock.d.ts.map +1 -0
- package/dist/parser/file-lock.js +124 -0
- package/dist/parser/file-lock.js.map +1 -0
- package/dist/parser/index.d.ts +1 -0
- package/dist/parser/index.d.ts.map +1 -1
- package/dist/parser/index.js +1 -0
- package/dist/parser/index.js.map +1 -1
- package/dist/parser/plan-document.d.ts +36 -0
- package/dist/parser/plan-document.d.ts.map +1 -1
- package/dist/parser/plan-document.js +75 -8
- package/dist/parser/plan-document.js.map +1 -1
- package/dist/parser/plans.d.ts.map +1 -1
- package/dist/parser/plans.js +28 -102
- package/dist/parser/plans.js.map +1 -1
- package/dist/parser/shadow.d.ts +5 -1
- package/dist/parser/shadow.d.ts.map +1 -1
- package/dist/parser/shadow.js +29 -17
- package/dist/parser/shadow.js.map +1 -1
- package/dist/parser/validate.d.ts +4 -1
- package/dist/parser/validate.d.ts.map +1 -1
- package/dist/parser/validate.js +50 -35
- package/dist/parser/validate.js.map +1 -1
- package/dist/parser/yaml.d.ts.map +1 -1
- package/dist/parser/yaml.js +322 -297
- package/dist/parser/yaml.js.map +1 -1
- package/dist/schema/task.d.ts +22 -0
- package/dist/schema/task.d.ts.map +1 -1
- package/dist/schema/task.js +7 -0
- package/dist/schema/task.js.map +1 -1
- package/dist/sessions/store.d.ts +254 -1
- package/dist/sessions/store.d.ts.map +1 -1
- package/dist/sessions/store.js +621 -1
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/types.d.ts +51 -2
- package/dist/sessions/types.d.ts.map +1 -1
- package/dist/sessions/types.js +25 -0
- package/dist/sessions/types.js.map +1 -1
- package/dist/strings/labels.d.ts +2 -0
- package/dist/strings/labels.d.ts.map +1 -1
- package/dist/strings/labels.js +2 -0
- package/dist/strings/labels.js.map +1 -1
- package/dist/utils/git.d.ts +2 -0
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +21 -5
- package/dist/utils/git.js.map +1 -1
- package/package.json +4 -1
- package/plugin/.claude-plugin/marketplace.json +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/plugins/kspec/skills/review/SKILL.md +37 -0
- package/plugin/plugins/kspec/skills/task-work/SKILL.md +16 -0
- package/plugin/plugins/kspec/skills/triage-inbox/SKILL.md +1 -1
- package/plugin/plugins/kspec/skills/writing-specs/SKILL.md +14 -0
- package/templates/agents-sections/05-commit-convention.md +14 -0
- package/templates/skills/review/SKILL.md +37 -0
- package/templates/skills/task-work/SKILL.md +16 -0
- package/templates/skills/triage-inbox/SKILL.md +1 -1
- 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"}
|