@ginkoai/cli 1.6.1 → 1.7.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/README.md +34 -0
- package/dist/commands/agent/agent-client.d.ts +150 -0
- package/dist/commands/agent/agent-client.d.ts.map +1 -0
- package/dist/commands/agent/agent-client.js +170 -0
- package/dist/commands/agent/agent-client.js.map +1 -0
- package/dist/commands/agent/index.d.ts +22 -0
- package/dist/commands/agent/index.d.ts.map +1 -0
- package/dist/commands/agent/index.js +121 -0
- package/dist/commands/agent/index.js.map +1 -0
- package/dist/commands/agent/list.d.ts +22 -0
- package/dist/commands/agent/list.d.ts.map +1 -0
- package/dist/commands/agent/list.js +119 -0
- package/dist/commands/agent/list.js.map +1 -0
- package/dist/commands/agent/register.d.ts +21 -0
- package/dist/commands/agent/register.d.ts.map +1 -0
- package/dist/commands/agent/register.js +97 -0
- package/dist/commands/agent/register.js.map +1 -0
- package/dist/commands/agent/status.d.ts +19 -0
- package/dist/commands/agent/status.d.ts.map +1 -0
- package/dist/commands/agent/status.js +271 -0
- package/dist/commands/agent/status.js.map +1 -0
- package/dist/commands/agent/work.d.ts +22 -0
- package/dist/commands/agent/work.d.ts.map +1 -0
- package/dist/commands/agent/work.js +459 -0
- package/dist/commands/agent/work.js.map +1 -0
- package/dist/commands/checkpoint/create.d.ts +27 -0
- package/dist/commands/checkpoint/create.d.ts.map +1 -0
- package/dist/commands/checkpoint/create.js +82 -0
- package/dist/commands/checkpoint/create.js.map +1 -0
- package/dist/commands/checkpoint/index.d.ts +23 -0
- package/dist/commands/checkpoint/index.d.ts.map +1 -0
- package/dist/commands/checkpoint/index.js +91 -0
- package/dist/commands/checkpoint/index.js.map +1 -0
- package/dist/commands/checkpoint/list.d.ts +27 -0
- package/dist/commands/checkpoint/list.d.ts.map +1 -0
- package/dist/commands/checkpoint/list.js +115 -0
- package/dist/commands/checkpoint/list.js.map +1 -0
- package/dist/commands/checkpoint/show.d.ts +23 -0
- package/dist/commands/checkpoint/show.d.ts.map +1 -0
- package/dist/commands/checkpoint/show.js +102 -0
- package/dist/commands/checkpoint/show.js.map +1 -0
- package/dist/commands/dlq.d.ts +24 -0
- package/dist/commands/dlq.d.ts.map +1 -0
- package/dist/commands/dlq.js +172 -0
- package/dist/commands/dlq.js.map +1 -0
- package/dist/commands/epic.d.ts +29 -0
- package/dist/commands/epic.d.ts.map +1 -0
- package/dist/commands/epic.js +322 -0
- package/dist/commands/epic.js.map +1 -0
- package/dist/commands/escalation/create.d.ts +22 -0
- package/dist/commands/escalation/create.d.ts.map +1 -0
- package/dist/commands/escalation/create.js +122 -0
- package/dist/commands/escalation/create.js.map +1 -0
- package/dist/commands/escalation/escalation-client.d.ts +101 -0
- package/dist/commands/escalation/escalation-client.d.ts.map +1 -0
- package/dist/commands/escalation/escalation-client.js +129 -0
- package/dist/commands/escalation/escalation-client.js.map +1 -0
- package/dist/commands/escalation/index.d.ts +22 -0
- package/dist/commands/escalation/index.d.ts.map +1 -0
- package/dist/commands/escalation/index.js +94 -0
- package/dist/commands/escalation/index.js.map +1 -0
- package/dist/commands/escalation/list.d.ts +24 -0
- package/dist/commands/escalation/list.d.ts.map +1 -0
- package/dist/commands/escalation/list.js +170 -0
- package/dist/commands/escalation/list.js.map +1 -0
- package/dist/commands/escalation/resolve.d.ts +20 -0
- package/dist/commands/escalation/resolve.d.ts.map +1 -0
- package/dist/commands/escalation/resolve.js +102 -0
- package/dist/commands/escalation/resolve.js.map +1 -0
- package/dist/commands/graph/api-client.d.ts +222 -1
- package/dist/commands/graph/api-client.d.ts.map +1 -1
- package/dist/commands/graph/api-client.js +82 -0
- package/dist/commands/graph/api-client.js.map +1 -1
- package/dist/commands/handoff.d.ts.map +1 -1
- package/dist/commands/handoff.js +9 -1
- package/dist/commands/handoff.js.map +1 -1
- package/dist/commands/log.d.ts +3 -0
- package/dist/commands/log.d.ts.map +1 -1
- package/dist/commands/log.js +110 -16
- package/dist/commands/log.js.map +1 -1
- package/dist/commands/notifications/history.d.ts +21 -0
- package/dist/commands/notifications/history.d.ts.map +1 -0
- package/dist/commands/notifications/history.js +160 -0
- package/dist/commands/notifications/history.js.map +1 -0
- package/dist/commands/notifications/index.d.ts +22 -0
- package/dist/commands/notifications/index.d.ts.map +1 -0
- package/dist/commands/notifications/index.js +87 -0
- package/dist/commands/notifications/index.js.map +1 -0
- package/dist/commands/notifications/list.d.ts +19 -0
- package/dist/commands/notifications/list.d.ts.map +1 -0
- package/dist/commands/notifications/list.js +132 -0
- package/dist/commands/notifications/list.js.map +1 -0
- package/dist/commands/notifications/test.d.ts +19 -0
- package/dist/commands/notifications/test.d.ts.map +1 -0
- package/dist/commands/notifications/test.js +217 -0
- package/dist/commands/notifications/test.js.map +1 -0
- package/dist/commands/orchestrate.d.ts +25 -0
- package/dist/commands/orchestrate.d.ts.map +1 -0
- package/dist/commands/orchestrate.js +858 -0
- package/dist/commands/orchestrate.js.map +1 -0
- package/dist/commands/sprint/deps.d.ts +29 -0
- package/dist/commands/sprint/deps.d.ts.map +1 -0
- package/dist/commands/sprint/deps.js +269 -0
- package/dist/commands/sprint/deps.js.map +1 -0
- package/dist/commands/sprint/index.d.ts +10 -5
- package/dist/commands/sprint/index.d.ts.map +1 -1
- package/dist/commands/sprint/index.js +26 -5
- package/dist/commands/sprint/index.js.map +1 -1
- package/dist/commands/start/index.d.ts.map +1 -1
- package/dist/commands/start/index.js +6 -0
- package/dist/commands/start/index.js.map +1 -1
- package/dist/commands/start/start-reflection.d.ts +11 -0
- package/dist/commands/start/start-reflection.d.ts.map +1 -1
- package/dist/commands/start/start-reflection.js +150 -12
- package/dist/commands/start/start-reflection.js.map +1 -1
- package/dist/commands/verify.d.ts +17 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +232 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/core/session-log-manager.d.ts +1 -1
- package/dist/core/session-log-manager.d.ts.map +1 -1
- package/dist/core/session-log-manager.js +12 -3
- package/dist/core/session-log-manager.js.map +1 -1
- package/dist/index.js +98 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/__tests__/task-timeout.test.d.ts +12 -0
- package/dist/lib/__tests__/task-timeout.test.d.ts.map +1 -0
- package/dist/lib/__tests__/task-timeout.test.js +278 -0
- package/dist/lib/__tests__/task-timeout.test.js.map +1 -0
- package/dist/lib/agent-heartbeat.d.ts +68 -0
- package/dist/lib/agent-heartbeat.d.ts.map +1 -0
- package/dist/lib/agent-heartbeat.js +117 -0
- package/dist/lib/agent-heartbeat.js.map +1 -0
- package/dist/lib/checkpoint.d.ts +85 -0
- package/dist/lib/checkpoint.d.ts.map +1 -0
- package/dist/lib/checkpoint.js +323 -0
- package/dist/lib/checkpoint.js.map +1 -0
- package/dist/lib/context-metrics.d.ts +230 -0
- package/dist/lib/context-metrics.d.ts.map +1 -0
- package/dist/lib/context-metrics.js +372 -0
- package/dist/lib/context-metrics.js.map +1 -0
- package/dist/lib/dead-letter-queue.d.ts +108 -0
- package/dist/lib/dead-letter-queue.d.ts.map +1 -0
- package/dist/lib/dead-letter-queue.js +378 -0
- package/dist/lib/dead-letter-queue.js.map +1 -0
- package/dist/lib/event-logger.d.ts +9 -1
- package/dist/lib/event-logger.d.ts.map +1 -1
- package/dist/lib/event-logger.js +45 -3
- package/dist/lib/event-logger.js.map +1 -1
- package/dist/lib/event-queue.d.ts.map +1 -1
- package/dist/lib/event-queue.js +13 -2
- package/dist/lib/event-queue.js.map +1 -1
- package/dist/lib/examples/timeout-demo.d.ts +13 -0
- package/dist/lib/examples/timeout-demo.d.ts.map +1 -0
- package/dist/lib/examples/timeout-demo.js +102 -0
- package/dist/lib/examples/timeout-demo.js.map +1 -0
- package/dist/lib/examples/timeout-integration-example.d.ts +17 -0
- package/dist/lib/examples/timeout-integration-example.d.ts.map +1 -0
- package/dist/lib/examples/timeout-integration-example.js +223 -0
- package/dist/lib/examples/timeout-integration-example.js.map +1 -0
- package/dist/lib/notification-hooks.d.ts +103 -0
- package/dist/lib/notification-hooks.d.ts.map +1 -0
- package/dist/lib/notification-hooks.js +223 -0
- package/dist/lib/notification-hooks.js.map +1 -0
- package/dist/lib/notifications/discord.d.ts +20 -0
- package/dist/lib/notifications/discord.d.ts.map +1 -0
- package/dist/lib/notifications/discord.js +140 -0
- package/dist/lib/notifications/discord.js.map +1 -0
- package/dist/lib/notifications/index.d.ts +66 -0
- package/dist/lib/notifications/index.d.ts.map +1 -0
- package/dist/lib/notifications/index.js +120 -0
- package/dist/lib/notifications/index.js.map +1 -0
- package/dist/lib/notifications/slack.d.ts +20 -0
- package/dist/lib/notifications/slack.d.ts.map +1 -0
- package/dist/lib/notifications/slack.js +186 -0
- package/dist/lib/notifications/slack.js.map +1 -0
- package/dist/lib/notifications/teams.d.ts +20 -0
- package/dist/lib/notifications/teams.d.ts.map +1 -0
- package/dist/lib/notifications/teams.js +146 -0
- package/dist/lib/notifications/teams.js.map +1 -0
- package/dist/lib/notifications/webhook.d.ts +23 -0
- package/dist/lib/notifications/webhook.d.ts.map +1 -0
- package/dist/lib/notifications/webhook.js +65 -0
- package/dist/lib/notifications/webhook.js.map +1 -0
- package/dist/lib/orchestrator-state.d.ts +194 -0
- package/dist/lib/orchestrator-state.d.ts.map +1 -0
- package/dist/lib/orchestrator-state.js +332 -0
- package/dist/lib/orchestrator-state.js.map +1 -0
- package/dist/lib/output-formatter.d.ts +25 -1
- package/dist/lib/output-formatter.d.ts.map +1 -1
- package/dist/lib/output-formatter.js +37 -17
- package/dist/lib/output-formatter.js.map +1 -1
- package/dist/lib/realtime-cursor.d.ts +107 -0
- package/dist/lib/realtime-cursor.d.ts.map +1 -0
- package/dist/lib/realtime-cursor.js +260 -0
- package/dist/lib/realtime-cursor.js.map +1 -0
- package/dist/lib/rollback.d.ts +86 -0
- package/dist/lib/rollback.d.ts.map +1 -0
- package/dist/lib/rollback.js +405 -0
- package/dist/lib/rollback.js.map +1 -0
- package/dist/lib/sprint-loader.d.ts +41 -2
- package/dist/lib/sprint-loader.d.ts.map +1 -1
- package/dist/lib/sprint-loader.js +335 -9
- package/dist/lib/sprint-loader.js.map +1 -1
- package/dist/lib/stale-agent-detector.d.ts +102 -0
- package/dist/lib/stale-agent-detector.d.ts.map +1 -0
- package/dist/lib/stale-agent-detector.js +156 -0
- package/dist/lib/stale-agent-detector.js.map +1 -0
- package/dist/lib/task-dependencies.d.ts +143 -0
- package/dist/lib/task-dependencies.d.ts.map +1 -0
- package/dist/lib/task-dependencies.js +357 -0
- package/dist/lib/task-dependencies.js.map +1 -0
- package/dist/lib/task-timeout.d.ts +153 -0
- package/dist/lib/task-timeout.d.ts.map +1 -0
- package/dist/lib/task-timeout.js +505 -0
- package/dist/lib/task-timeout.js.map +1 -0
- package/dist/lib/verification/build-check.d.ts +55 -0
- package/dist/lib/verification/build-check.d.ts.map +1 -0
- package/dist/lib/verification/build-check.js +111 -0
- package/dist/lib/verification/build-check.js.map +1 -0
- package/dist/lib/verification/index.d.ts +19 -0
- package/dist/lib/verification/index.d.ts.map +1 -0
- package/dist/lib/verification/index.js +17 -0
- package/dist/lib/verification/index.js.map +1 -0
- package/dist/lib/verification/lint-check.d.ts +34 -0
- package/dist/lib/verification/lint-check.d.ts.map +1 -0
- package/dist/lib/verification/lint-check.js +215 -0
- package/dist/lib/verification/lint-check.js.map +1 -0
- package/dist/lib/verification/test-runner.d.ts +50 -0
- package/dist/lib/verification/test-runner.d.ts.map +1 -0
- package/dist/lib/verification/test-runner.js +225 -0
- package/dist/lib/verification/test-runner.js.map +1 -0
- package/dist/templates/ai-instructions-template.d.ts +3 -2
- package/dist/templates/ai-instructions-template.d.ts.map +1 -1
- package/dist/templates/ai-instructions-template.js +104 -2
- package/dist/templates/ai-instructions-template.js.map +1 -1
- package/dist/templates/epic-template.md +319 -0
- package/dist/utils/command-helpers.d.ts +10 -0
- package/dist/utils/command-helpers.d.ts.map +1 -1
- package/dist/utils/command-helpers.js +59 -1
- package/dist/utils/command-helpers.js.map +1 -1
- package/dist/utils/pattern-confidence.d.ts +82 -0
- package/dist/utils/pattern-confidence.d.ts.map +1 -0
- package/dist/utils/pattern-confidence.js +172 -0
- package/dist/utils/pattern-confidence.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: utility
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2025-12-05
|
|
5
|
+
* @tags: [verification, testing, task-validation, epic-004, sprint-3]
|
|
6
|
+
* @related: [build-check.ts, lint-check.ts, ../sprint-loader.ts]
|
|
7
|
+
* @priority: high
|
|
8
|
+
* @complexity: medium
|
|
9
|
+
* @dependencies: [child_process, fs, path]
|
|
10
|
+
*/
|
|
11
|
+
import { spawn } from 'child_process';
|
|
12
|
+
import { existsSync, readFileSync } from 'fs';
|
|
13
|
+
import { join } from 'path';
|
|
14
|
+
/**
|
|
15
|
+
* Detect test framework from project configuration
|
|
16
|
+
* Checks package.json scripts and config files
|
|
17
|
+
*/
|
|
18
|
+
function detectTestFramework(projectRoot) {
|
|
19
|
+
// Check package.json first
|
|
20
|
+
const packageJsonPath = join(projectRoot, 'package.json');
|
|
21
|
+
if (existsSync(packageJsonPath)) {
|
|
22
|
+
try {
|
|
23
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
24
|
+
// Check for test script
|
|
25
|
+
const testScript = packageJson.scripts?.test;
|
|
26
|
+
if (testScript) {
|
|
27
|
+
// Detect framework from test script command
|
|
28
|
+
if (testScript.includes('jest')) {
|
|
29
|
+
return { framework: 'jest', command: 'npm', args: ['test', '--', '--no-coverage'] };
|
|
30
|
+
}
|
|
31
|
+
if (testScript.includes('vitest')) {
|
|
32
|
+
return { framework: 'vitest', command: 'npm', args: ['test'] };
|
|
33
|
+
}
|
|
34
|
+
if (testScript.includes('mocha')) {
|
|
35
|
+
return { framework: 'mocha', command: 'npm', args: ['test'] };
|
|
36
|
+
}
|
|
37
|
+
// Generic npm test
|
|
38
|
+
return { framework: 'npm-test', command: 'npm', args: ['test'] };
|
|
39
|
+
}
|
|
40
|
+
// Check for framework in devDependencies
|
|
41
|
+
const devDeps = packageJson.devDependencies || {};
|
|
42
|
+
const deps = packageJson.dependencies || {};
|
|
43
|
+
const allDeps = { ...devDeps, ...deps };
|
|
44
|
+
if (allDeps.jest || allDeps['@types/jest']) {
|
|
45
|
+
return { framework: 'jest', command: 'npx', args: ['jest', '--no-coverage'] };
|
|
46
|
+
}
|
|
47
|
+
if (allDeps.vitest) {
|
|
48
|
+
return { framework: 'vitest', command: 'npx', args: ['vitest', 'run'] };
|
|
49
|
+
}
|
|
50
|
+
if (allDeps.mocha) {
|
|
51
|
+
return { framework: 'mocha', command: 'npx', args: ['mocha'] };
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
// Ignore JSON parse errors
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Check for config files
|
|
59
|
+
const configFiles = [
|
|
60
|
+
{ file: 'jest.config.js', framework: 'jest', command: 'npx', args: ['jest', '--no-coverage'] },
|
|
61
|
+
{ file: 'jest.config.ts', framework: 'jest', command: 'npx', args: ['jest', '--no-coverage'] },
|
|
62
|
+
{ file: 'vitest.config.ts', framework: 'vitest', command: 'npx', args: ['vitest', 'run'] },
|
|
63
|
+
{ file: 'vitest.config.js', framework: 'vitest', command: 'npx', args: ['vitest', 'run'] },
|
|
64
|
+
{ file: '.mocharc.json', framework: 'mocha', command: 'npx', args: ['mocha'] },
|
|
65
|
+
{ file: '.mocharc.js', framework: 'mocha', command: 'npx', args: ['mocha'] },
|
|
66
|
+
];
|
|
67
|
+
for (const config of configFiles) {
|
|
68
|
+
if (existsSync(join(projectRoot, config.file))) {
|
|
69
|
+
return { framework: config.framework, command: config.command, args: config.args };
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Default: try npm test
|
|
73
|
+
return { framework: 'unknown', command: 'npm', args: ['test'] };
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Parse test output to extract pass/fail counts
|
|
77
|
+
* Supports Jest, Vitest, Mocha output formats
|
|
78
|
+
*/
|
|
79
|
+
function parseTestOutput(output, framework) {
|
|
80
|
+
let passCount = 0;
|
|
81
|
+
let failCount = 0;
|
|
82
|
+
let coverage;
|
|
83
|
+
// Jest/Vitest patterns:
|
|
84
|
+
// "Tests: 5 passed, 1 failed, 6 total"
|
|
85
|
+
// "Test Suites: 2 passed, 2 total"
|
|
86
|
+
// "Tests: 142 passed, 142 total"
|
|
87
|
+
const jestPattern = /Tests?:\s*(?:(\d+)\s+passed)?(?:,?\s*(\d+)\s+failed)?(?:,?\s*(\d+)\s+total)?/i;
|
|
88
|
+
const jestMatch = output.match(jestPattern);
|
|
89
|
+
if (jestMatch) {
|
|
90
|
+
passCount = parseInt(jestMatch[1] || '0', 10);
|
|
91
|
+
failCount = parseInt(jestMatch[2] || '0', 10);
|
|
92
|
+
const total = parseInt(jestMatch[3] || '0', 10);
|
|
93
|
+
// If we have total but not pass/fail breakdown, calculate
|
|
94
|
+
if (total > 0 && passCount === 0 && failCount === 0) {
|
|
95
|
+
// Check for failures in output
|
|
96
|
+
const failureMatch = output.match(/(\d+)\s+failing/i);
|
|
97
|
+
if (failureMatch) {
|
|
98
|
+
failCount = parseInt(failureMatch[1], 10);
|
|
99
|
+
passCount = total - failCount;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
// Assume all passed if no failures reported
|
|
103
|
+
passCount = total;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Mocha patterns:
|
|
108
|
+
// " 15 passing"
|
|
109
|
+
// " 2 failing"
|
|
110
|
+
const mochaPassPattern = /(\d+)\s+passing/i;
|
|
111
|
+
const mochaFailPattern = /(\d+)\s+failing/i;
|
|
112
|
+
const mochaPassMatch = output.match(mochaPassPattern);
|
|
113
|
+
const mochaFailMatch = output.match(mochaFailPattern);
|
|
114
|
+
if (mochaPassMatch) {
|
|
115
|
+
passCount = parseInt(mochaPassMatch[1], 10);
|
|
116
|
+
}
|
|
117
|
+
if (mochaFailMatch) {
|
|
118
|
+
failCount = parseInt(mochaFailMatch[1], 10);
|
|
119
|
+
}
|
|
120
|
+
// Coverage pattern (Jest/Vitest):
|
|
121
|
+
// "All files | 85.71 | 75.00 | 80.00 | 85.71 |"
|
|
122
|
+
// Extract overall coverage percentage
|
|
123
|
+
const coveragePattern = /All files\s*\|\s*(\d+(?:\.\d+)?)/i;
|
|
124
|
+
const coverageMatch = output.match(coveragePattern);
|
|
125
|
+
if (coverageMatch) {
|
|
126
|
+
coverage = parseFloat(coverageMatch[1]);
|
|
127
|
+
}
|
|
128
|
+
return { passCount, failCount, coverage };
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Run tests and capture results
|
|
132
|
+
*
|
|
133
|
+
* Detects test framework from package.json scripts or config files.
|
|
134
|
+
* Runs tests with timeout, captures output, parses pass/fail counts.
|
|
135
|
+
*
|
|
136
|
+
* @param projectRoot - Path to project root directory
|
|
137
|
+
* @param options - Test execution options (timeout)
|
|
138
|
+
* @returns Structured test result with pass/fail counts
|
|
139
|
+
*
|
|
140
|
+
* @example
|
|
141
|
+
* ```typescript
|
|
142
|
+
* const result = await runTests('/path/to/project');
|
|
143
|
+
* if (result.passed) {
|
|
144
|
+
* console.log(`✓ All tests passed (${result.passCount})`);
|
|
145
|
+
* } else {
|
|
146
|
+
* console.log(`✗ ${result.failCount} tests failed`);
|
|
147
|
+
* }
|
|
148
|
+
* ```
|
|
149
|
+
*/
|
|
150
|
+
export async function runTests(projectRoot, options = {}) {
|
|
151
|
+
const timeout = options.timeout || 300000; // 5 minutes default
|
|
152
|
+
const startTime = Date.now();
|
|
153
|
+
// Detect test framework and command
|
|
154
|
+
const config = detectTestFramework(projectRoot);
|
|
155
|
+
return new Promise((resolve) => {
|
|
156
|
+
let output = '';
|
|
157
|
+
let timedOut = false;
|
|
158
|
+
// Spawn test process
|
|
159
|
+
const testProcess = spawn(config.command, config.args, {
|
|
160
|
+
cwd: projectRoot,
|
|
161
|
+
shell: true,
|
|
162
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
163
|
+
});
|
|
164
|
+
// Capture stdout and stderr
|
|
165
|
+
testProcess.stdout.on('data', (data) => {
|
|
166
|
+
output += data.toString();
|
|
167
|
+
});
|
|
168
|
+
testProcess.stderr.on('data', (data) => {
|
|
169
|
+
output += data.toString();
|
|
170
|
+
});
|
|
171
|
+
// Set timeout
|
|
172
|
+
const timeoutHandle = setTimeout(() => {
|
|
173
|
+
timedOut = true;
|
|
174
|
+
testProcess.kill('SIGTERM');
|
|
175
|
+
// Force kill after 5 seconds if still running
|
|
176
|
+
setTimeout(() => {
|
|
177
|
+
if (!testProcess.killed) {
|
|
178
|
+
testProcess.kill('SIGKILL');
|
|
179
|
+
}
|
|
180
|
+
}, 5000);
|
|
181
|
+
}, timeout);
|
|
182
|
+
// Handle process completion
|
|
183
|
+
testProcess.on('close', (code) => {
|
|
184
|
+
clearTimeout(timeoutHandle);
|
|
185
|
+
const duration_ms = Date.now() - startTime;
|
|
186
|
+
// If timed out, return timeout result
|
|
187
|
+
if (timedOut) {
|
|
188
|
+
resolve({
|
|
189
|
+
passed: false,
|
|
190
|
+
passCount: 0,
|
|
191
|
+
failCount: 0,
|
|
192
|
+
output: `Test execution timed out after ${timeout}ms\n\n${output}`,
|
|
193
|
+
duration_ms,
|
|
194
|
+
});
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
// Parse test output
|
|
198
|
+
const { passCount, failCount, coverage } = parseTestOutput(output, config.framework);
|
|
199
|
+
// Determine if tests passed
|
|
200
|
+
// Exit code 0 = success, but also check for failures in output
|
|
201
|
+
const passed = code === 0 && failCount === 0;
|
|
202
|
+
resolve({
|
|
203
|
+
passed,
|
|
204
|
+
passCount,
|
|
205
|
+
failCount,
|
|
206
|
+
coverage,
|
|
207
|
+
output,
|
|
208
|
+
duration_ms,
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
// Handle spawn errors
|
|
212
|
+
testProcess.on('error', (error) => {
|
|
213
|
+
clearTimeout(timeoutHandle);
|
|
214
|
+
const duration_ms = Date.now() - startTime;
|
|
215
|
+
resolve({
|
|
216
|
+
passed: false,
|
|
217
|
+
passCount: 0,
|
|
218
|
+
failCount: 0,
|
|
219
|
+
output: `Failed to run tests: ${error.message}\n\nDetected framework: ${config.framework}\nCommand: ${config.command} ${config.args.join(' ')}`,
|
|
220
|
+
duration_ms,
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=test-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-runner.js","sourceRoot":"","sources":["../../../src/lib/verification/test-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @fileType: utility
|
|
3
3
|
* @status: current
|
|
4
|
-
* @updated: 2025-
|
|
5
|
-
* @tags: [template, ai-instructions, frontmatter, ai-optimization, model-agnostic]
|
|
4
|
+
* @updated: 2025-11-25
|
|
5
|
+
* @tags: [template, ai-instructions, frontmatter, ai-optimization, model-agnostic, graph-queries, epic-003]
|
|
6
6
|
* @related: [init.ts, project-analyzer.ts, ai-adapter.ts]
|
|
7
7
|
* @priority: high
|
|
8
8
|
* @complexity: medium
|
|
@@ -31,6 +31,7 @@ export declare class AiInstructionsTemplate {
|
|
|
31
31
|
private static readonly FRONTMATTER_SECTION;
|
|
32
32
|
private static readonly DEVELOPMENT_WORKFLOW;
|
|
33
33
|
private static readonly CONTEXT_REFLEXES;
|
|
34
|
+
private static readonly PROJECT_KNOWLEDGE_QUERIES;
|
|
34
35
|
static generate(variables: TemplateVariables, modelSpecificContent?: string): string;
|
|
35
36
|
private static generateQuickCommands;
|
|
36
37
|
private static generateProjectSpecificSection;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-instructions-template.d.ts","sourceRoot":"","sources":["../../src/templates/ai-instructions-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IAC3E,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;IAC5D,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,
|
|
1
|
+
{"version":3,"file":"ai-instructions-template.d.ts","sourceRoot":"","sources":["../../src/templates/ai-instructions-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IAC3E,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;IAC5D,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAkF/C;IAEA,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAmC3C;IAEA,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAkB5C;IAEA,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CA+BxC;IAEA,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CA6DjD;IAEA,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,EAAE,oBAAoB,CAAC,EAAE,MAAM,GAAG,MAAM;IAqDpF,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAqBpC,OAAO,CAAC,MAAM,CAAC,8BAA8B;IA0C7C,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAerC,OAAO,CAAC,MAAM,CAAC,kBAAkB;CAQlC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @fileType: utility
|
|
3
3
|
* @status: current
|
|
4
|
-
* @updated: 2025-
|
|
5
|
-
* @tags: [template, ai-instructions, frontmatter, ai-optimization, model-agnostic]
|
|
4
|
+
* @updated: 2025-11-25
|
|
5
|
+
* @tags: [template, ai-instructions, frontmatter, ai-optimization, model-agnostic, graph-queries, epic-003]
|
|
6
6
|
* @related: [init.ts, project-analyzer.ts, ai-adapter.ts]
|
|
7
7
|
* @priority: high
|
|
8
8
|
* @complexity: medium
|
|
@@ -30,6 +30,44 @@ When the user types a **single word** that matches a ginko command, **IMMEDIATEL
|
|
|
30
30
|
|
|
31
31
|
**Why:** Eliminates 9+ seconds of response latency (28s → <2s startup)
|
|
32
32
|
|
|
33
|
+
### After Execution: Concise Readiness Message
|
|
34
|
+
|
|
35
|
+
After \`ginko start\` completes, provide a brief readiness message (6-10 lines):
|
|
36
|
+
|
|
37
|
+
**Template:**
|
|
38
|
+
\`\`\`
|
|
39
|
+
Ready | [Flow State] | [Work Mode]
|
|
40
|
+
Last session: [What was done/in progress last time]
|
|
41
|
+
Next up: [TASK-ID] - [Task title] (start|continue)
|
|
42
|
+
|
|
43
|
+
Sprint: [Sprint Name] [Progress]%
|
|
44
|
+
Follow: [ADR constraints]
|
|
45
|
+
Apply: [Pattern guidance with confidence icons]
|
|
46
|
+
Avoid: [Gotcha warnings]
|
|
47
|
+
Branch: [branch] ([uncommitted count] uncommitted files)
|
|
48
|
+
\`\`\`
|
|
49
|
+
|
|
50
|
+
**Example:**
|
|
51
|
+
\`\`\`
|
|
52
|
+
Ready | Hot (10/10) | Think & Build mode
|
|
53
|
+
Last session: EPIC-003 Sprint 2 TASK-1 complete (Blog infrastructure)
|
|
54
|
+
Next up: TASK-2 - Verify human output format (start)
|
|
55
|
+
|
|
56
|
+
Sprint: Enrichment Test 50%
|
|
57
|
+
Follow: ADR-002, ADR-033
|
|
58
|
+
Apply: retry-pattern ◐, output-formatter-pattern ◐
|
|
59
|
+
Avoid: 💡 timer-unref-gotcha
|
|
60
|
+
Branch: main (12 uncommitted files)
|
|
61
|
+
\`\`\`
|
|
62
|
+
|
|
63
|
+
**Guidelines:**
|
|
64
|
+
- Line 1: Flow state and work mode
|
|
65
|
+
- Line 2: "Last session:" - what happened before
|
|
66
|
+
- Line 3: "Next up:" - what to work on now (start/continue)
|
|
67
|
+
- Sprint block: Progress + cognitive scaffolding (Follow/Apply/Avoid)
|
|
68
|
+
- Confidence icons: ★ high, ◐ medium, ○ low
|
|
69
|
+
- Severity icons: 🚨 critical, ⚠️ high, 💡 medium/low
|
|
70
|
+
|
|
33
71
|
### New Project Onboarding
|
|
34
72
|
|
|
35
73
|
**After first \`ginko start\`**, check for charter (\`docs/PROJECT-CHARTER.md\`):
|
|
@@ -140,6 +178,68 @@ These "mental reflexes" activate naturally without explicit prompting to maintai
|
|
|
140
178
|
- **Full Planning**: Frequent reflex triggers for maximum rigor
|
|
141
179
|
|
|
142
180
|
These reflexes maintain continuous context awareness while preserving natural workflow.
|
|
181
|
+
`;
|
|
182
|
+
static PROJECT_KNOWLEDGE_QUERIES = `
|
|
183
|
+
## 🔍 Answering Project Questions (EPIC-003)
|
|
184
|
+
|
|
185
|
+
When users ask factual questions about the project, query available data sources directly.
|
|
186
|
+
|
|
187
|
+
### Graph API - Requires \`GINKO_BEARER_TOKEN\` and \`GINKO_GRAPH_ID\`
|
|
188
|
+
|
|
189
|
+
**Setup credentials:**
|
|
190
|
+
1. Run \`ginko login\` to authenticate (stores token in ~/.ginko/auth.json)
|
|
191
|
+
2. Run \`ginko graph init\` to create graph (stores ID in .ginko/graph/config.json)
|
|
192
|
+
3. Export for shell use: \`export GINKO_BEARER_TOKEN=$(cat ~/.ginko/auth.json | jq -r .api_key)\`
|
|
193
|
+
4. Export graph ID: \`export GINKO_GRAPH_ID=$(cat .ginko/graph/config.json | jq -r .graphId)\`
|
|
194
|
+
|
|
195
|
+
**Semantic search** - finds content similar to query:
|
|
196
|
+
\`\`\`bash
|
|
197
|
+
curl -X POST https://app.ginkoai.com/api/v1/graph/query \\
|
|
198
|
+
-H "Authorization: Bearer $GINKO_BEARER_TOKEN" \\
|
|
199
|
+
-H "Content-Type: application/json" \\
|
|
200
|
+
-d '{"graphId": "'"$GINKO_GRAPH_ID"'", "query": "YOUR_SEARCH_TERM", "limit": 5}'
|
|
201
|
+
\`\`\`
|
|
202
|
+
|
|
203
|
+
**List nodes by type** (ADR, PRD, Pattern, Gotcha, Event, Sprint, Task):
|
|
204
|
+
\`\`\`bash
|
|
205
|
+
curl "https://app.ginkoai.com/api/v1/graph/nodes?graphId=$GINKO_GRAPH_ID&labels=ADR&limit=10" \\
|
|
206
|
+
-H "Authorization: Bearer $GINKO_BEARER_TOKEN"
|
|
207
|
+
\`\`\`
|
|
208
|
+
|
|
209
|
+
**Filter by property** (e.g., events by user):
|
|
210
|
+
\`\`\`bash
|
|
211
|
+
curl "https://app.ginkoai.com/api/v1/graph/nodes?graphId=$GINKO_GRAPH_ID&labels=Event&user_id=USER_EMAIL&limit=20" \\
|
|
212
|
+
-H "Authorization: Bearer $GINKO_BEARER_TOKEN"
|
|
213
|
+
\`\`\`
|
|
214
|
+
|
|
215
|
+
### Local Files (Fallback when graph unavailable)
|
|
216
|
+
|
|
217
|
+
| Question Type | File Location |
|
|
218
|
+
|--------------|---------------|
|
|
219
|
+
| Sprint progress | \`docs/sprints/CURRENT-SPRINT.md\` |
|
|
220
|
+
| Architecture decisions | \`docs/adr/ADR-*.md\` |
|
|
221
|
+
| Project goals | \`docs/PROJECT-CHARTER.md\` |
|
|
222
|
+
| Recent activity | \`.ginko/sessions/[user]/current-events.jsonl\` |
|
|
223
|
+
| Session logs | \`.ginko/sessions/[user]/current-session-log.md\` |
|
|
224
|
+
|
|
225
|
+
### Common Query Recipes
|
|
226
|
+
|
|
227
|
+
**"What's our sprint progress?"**
|
|
228
|
+
→ Read \`docs/sprints/CURRENT-SPRINT.md\`, count checkboxes:
|
|
229
|
+
\`\`\`bash
|
|
230
|
+
grep -c "\\[x\\]" docs/sprints/CURRENT-SPRINT.md # complete
|
|
231
|
+
grep -c "\\[@\\]" docs/sprints/CURRENT-SPRINT.md # in progress
|
|
232
|
+
grep -c "\\[ \\]" docs/sprints/CURRENT-SPRINT.md # pending
|
|
233
|
+
\`\`\`
|
|
234
|
+
|
|
235
|
+
**"How do we handle X?" / "What's our approach to X?"**
|
|
236
|
+
→ Semantic search: \`{"query": "X"}\` OR local: \`grep -l -i "X" docs/adr/*.md\`
|
|
237
|
+
|
|
238
|
+
**"What is [person] working on?"**
|
|
239
|
+
→ Query events by user_id OR: \`grep -i "person" .ginko/sessions/*/current-session-log.md\`
|
|
240
|
+
|
|
241
|
+
**"Show me ADRs about [topic]"**
|
|
242
|
+
→ Semantic search with \`labels=ADR\` filter OR: \`grep -l -i "topic" docs/adr/*.md\`
|
|
143
243
|
`;
|
|
144
244
|
static generate(variables, modelSpecificContent) {
|
|
145
245
|
const aiName = variables.aiModel || 'AI Assistant';
|
|
@@ -164,6 +264,8 @@ ${this.DEVELOPMENT_WORKFLOW}
|
|
|
164
264
|
|
|
165
265
|
${this.CONTEXT_REFLEXES}
|
|
166
266
|
|
|
267
|
+
${this.PROJECT_KNOWLEDGE_QUERIES}
|
|
268
|
+
|
|
167
269
|
${this.generateProjectSpecificSection(variables)}
|
|
168
270
|
|
|
169
271
|
${this.generateTestingSection(variables)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-instructions-template.js","sourceRoot":"","sources":["../../src/templates/ai-instructions-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAsBH,MAAM,OAAO,sBAAsB;IACzB,MAAM,CAAU,uBAAuB,GAAG
|
|
1
|
+
{"version":3,"file":"ai-instructions-template.js","sourceRoot":"","sources":["../../src/templates/ai-instructions-template.ts"],"names":[],"mappings":"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"}
|