@devran-ai/kit 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/.agent/CheatSheet.md +350 -0
  2. package/.agent/README.md +76 -0
  3. package/.agent/agents/README.md +155 -0
  4. package/.agent/agents/architect.md +185 -0
  5. package/.agent/agents/backend-specialist.md +276 -0
  6. package/.agent/agents/build-error-resolver.md +207 -0
  7. package/.agent/agents/code-reviewer.md +162 -0
  8. package/.agent/agents/database-architect.md +138 -0
  9. package/.agent/agents/devops-engineer.md +144 -0
  10. package/.agent/agents/doc-updater.md +229 -0
  11. package/.agent/agents/e2e-runner.md +145 -0
  12. package/.agent/agents/explorer-agent.md +143 -0
  13. package/.agent/agents/frontend-specialist.md +144 -0
  14. package/.agent/agents/go-reviewer.md +128 -0
  15. package/.agent/agents/knowledge-agent.md +197 -0
  16. package/.agent/agents/mobile-developer.md +150 -0
  17. package/.agent/agents/performance-optimizer.md +175 -0
  18. package/.agent/agents/planner.md +133 -0
  19. package/.agent/agents/pr-reviewer.md +148 -0
  20. package/.agent/agents/python-reviewer.md +123 -0
  21. package/.agent/agents/refactor-cleaner.md +201 -0
  22. package/.agent/agents/reliability-engineer.md +156 -0
  23. package/.agent/agents/security-reviewer.md +141 -0
  24. package/.agent/agents/sprint-orchestrator.md +124 -0
  25. package/.agent/agents/tdd-guide.md +179 -0
  26. package/.agent/agents/typescript-reviewer.md +110 -0
  27. package/.agent/checklists/README.md +102 -0
  28. package/.agent/checklists/pre-commit.md +93 -0
  29. package/.agent/checklists/session-end.md +99 -0
  30. package/.agent/checklists/session-start.md +102 -0
  31. package/.agent/checklists/task-complete.md +81 -0
  32. package/.agent/commands/README.md +130 -0
  33. package/.agent/commands/adr.md +29 -0
  34. package/.agent/commands/ask.md +28 -0
  35. package/.agent/commands/build.md +30 -0
  36. package/.agent/commands/changelog.md +40 -0
  37. package/.agent/commands/checkpoint.md +28 -0
  38. package/.agent/commands/code-review.md +65 -0
  39. package/.agent/commands/compact.md +28 -0
  40. package/.agent/commands/cook.md +30 -0
  41. package/.agent/commands/db.md +30 -0
  42. package/.agent/commands/debug.md +31 -0
  43. package/.agent/commands/deploy.md +37 -0
  44. package/.agent/commands/design.md +29 -0
  45. package/.agent/commands/doc.md +30 -0
  46. package/.agent/commands/eval.md +30 -0
  47. package/.agent/commands/fix.md +32 -0
  48. package/.agent/commands/git.md +32 -0
  49. package/.agent/commands/help.md +273 -0
  50. package/.agent/commands/implement.md +30 -0
  51. package/.agent/commands/integrate.md +32 -0
  52. package/.agent/commands/learn.md +29 -0
  53. package/.agent/commands/perf.md +31 -0
  54. package/.agent/commands/plan.md +56 -0
  55. package/.agent/commands/pr-describe.md +65 -0
  56. package/.agent/commands/pr-fix.md +45 -0
  57. package/.agent/commands/pr-merge.md +45 -0
  58. package/.agent/commands/pr-review.md +50 -0
  59. package/.agent/commands/pr-split.md +54 -0
  60. package/.agent/commands/pr-status.md +56 -0
  61. package/.agent/commands/pr.md +58 -0
  62. package/.agent/commands/refactor.md +32 -0
  63. package/.agent/commands/research.md +28 -0
  64. package/.agent/commands/scout.md +30 -0
  65. package/.agent/commands/security-scan.md +33 -0
  66. package/.agent/commands/setup.md +31 -0
  67. package/.agent/commands/status.md +59 -0
  68. package/.agent/commands/tdd.md +73 -0
  69. package/.agent/commands/verify.md +58 -0
  70. package/.agent/contexts/brainstorm.md +26 -0
  71. package/.agent/contexts/debug.md +28 -0
  72. package/.agent/contexts/implement.md +29 -0
  73. package/.agent/contexts/plan-quality-log.md +30 -0
  74. package/.agent/contexts/review.md +27 -0
  75. package/.agent/contexts/ship.md +28 -0
  76. package/.agent/decisions/001-trust-grade-governance.md +46 -0
  77. package/.agent/decisions/002-cross-ide-generation.md +15 -0
  78. package/.agent/engine/identity.json +4 -0
  79. package/.agent/engine/loading-rules.json +193 -0
  80. package/.agent/engine/marketplace-index.json +29 -0
  81. package/.agent/engine/mcp-servers/filesystem.json +9 -0
  82. package/.agent/engine/mcp-servers/github.json +11 -0
  83. package/.agent/engine/mcp-servers/postgres.json +11 -0
  84. package/.agent/engine/mcp-servers/supabase.json +11 -0
  85. package/.agent/engine/mcp-servers/vercel.json +11 -0
  86. package/.agent/engine/reliability-config.json +14 -0
  87. package/.agent/engine/sdlc-map.json +50 -0
  88. package/.agent/engine/workflow-state.json +167 -0
  89. package/.agent/hooks/README.md +101 -0
  90. package/.agent/hooks/hooks.json +104 -0
  91. package/.agent/hooks/templates/session-end.md +110 -0
  92. package/.agent/hooks/templates/session-start.md +95 -0
  93. package/.agent/manifest.json +466 -0
  94. package/.agent/rules/agent-upgrade-policy.md +56 -0
  95. package/.agent/rules/architecture.md +111 -0
  96. package/.agent/rules/coding-style.md +75 -0
  97. package/.agent/rules/documentation.md +74 -0
  98. package/.agent/rules/git-workflow.md +140 -0
  99. package/.agent/rules/quality-gate.md +117 -0
  100. package/.agent/rules/security.md +67 -0
  101. package/.agent/rules/sprint-tracking.md +103 -0
  102. package/.agent/rules/testing.md +80 -0
  103. package/.agent/rules/workflow-standards.md +30 -0
  104. package/.agent/rules.md +293 -0
  105. package/.agent/session-context.md +69 -0
  106. package/.agent/session-state.json +27 -0
  107. package/.agent/skills/README.md +135 -0
  108. package/.agent/skills/api-patterns/SKILL.md +117 -0
  109. package/.agent/skills/app-builder/SKILL.md +202 -0
  110. package/.agent/skills/architecture/SKILL.md +101 -0
  111. package/.agent/skills/behavioral-modes/SKILL.md +295 -0
  112. package/.agent/skills/brainstorming/SKILL.md +156 -0
  113. package/.agent/skills/clean-code/SKILL.md +142 -0
  114. package/.agent/skills/context-budget/SKILL.md +78 -0
  115. package/.agent/skills/continuous-learning/SKILL.md +145 -0
  116. package/.agent/skills/database-design/SKILL.md +303 -0
  117. package/.agent/skills/debugging-strategies/SKILL.md +158 -0
  118. package/.agent/skills/deployment-procedures/SKILL.md +191 -0
  119. package/.agent/skills/docker-patterns/SKILL.md +161 -0
  120. package/.agent/skills/eval-harness/SKILL.md +89 -0
  121. package/.agent/skills/frontend-patterns/SKILL.md +141 -0
  122. package/.agent/skills/git-workflow/SKILL.md +159 -0
  123. package/.agent/skills/i18n-localization/SKILL.md +191 -0
  124. package/.agent/skills/intelligent-routing/SKILL.md +180 -0
  125. package/.agent/skills/mcp-integration/SKILL.md +240 -0
  126. package/.agent/skills/mobile-design/SKILL.md +191 -0
  127. package/.agent/skills/nodejs-patterns/SKILL.md +164 -0
  128. package/.agent/skills/parallel-agents/SKILL.md +200 -0
  129. package/.agent/skills/performance-profiling/SKILL.md +134 -0
  130. package/.agent/skills/plan-validation/SKILL.md +192 -0
  131. package/.agent/skills/plan-writing/SKILL.md +183 -0
  132. package/.agent/skills/plan-writing/domain-enhancers.md +184 -0
  133. package/.agent/skills/plan-writing/plan-retrospective.md +116 -0
  134. package/.agent/skills/plan-writing/plan-schema.md +119 -0
  135. package/.agent/skills/pr-toolkit/SKILL.md +174 -0
  136. package/.agent/skills/production-readiness/SKILL.md +126 -0
  137. package/.agent/skills/security-practices/SKILL.md +109 -0
  138. package/.agent/skills/shell-conventions/SKILL.md +92 -0
  139. package/.agent/skills/strategic-compact/SKILL.md +62 -0
  140. package/.agent/skills/testing-patterns/SKILL.md +141 -0
  141. package/.agent/skills/typescript-expert/SKILL.md +160 -0
  142. package/.agent/skills/ui-ux-pro-max/SKILL.md +137 -0
  143. package/.agent/skills/ui-ux-pro-max/data/charts.csv +26 -0
  144. package/.agent/skills/ui-ux-pro-max/data/colors.csv +97 -0
  145. package/.agent/skills/ui-ux-pro-max/data/icons.csv +101 -0
  146. package/.agent/skills/ui-ux-pro-max/data/landing.csv +31 -0
  147. package/.agent/skills/ui-ux-pro-max/data/products.csv +97 -0
  148. package/.agent/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
  149. package/.agent/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
  150. package/.agent/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  151. package/.agent/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  152. package/.agent/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  153. package/.agent/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  154. package/.agent/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  155. package/.agent/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  156. package/.agent/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  157. package/.agent/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
  158. package/.agent/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  159. package/.agent/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  160. package/.agent/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  161. package/.agent/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  162. package/.agent/skills/ui-ux-pro-max/data/styles.csv +68 -0
  163. package/.agent/skills/ui-ux-pro-max/data/typography.csv +58 -0
  164. package/.agent/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  165. package/.agent/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  166. package/.agent/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
  167. package/.agent/skills/ui-ux-pro-max/scripts/core.py +253 -0
  168. package/.agent/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
  169. package/.agent/skills/ui-ux-pro-max/scripts/search.py +114 -0
  170. package/.agent/skills/verification-loop/SKILL.md +89 -0
  171. package/.agent/skills/webapp-testing/SKILL.md +175 -0
  172. package/.agent/templates/adr-template.md +32 -0
  173. package/.agent/templates/bug-report.md +37 -0
  174. package/.agent/templates/feature-request.md +32 -0
  175. package/.agent/workflows/README.md +101 -0
  176. package/.agent/workflows/brainstorm.md +86 -0
  177. package/.agent/workflows/create.md +85 -0
  178. package/.agent/workflows/debug.md +83 -0
  179. package/.agent/workflows/deploy.md +114 -0
  180. package/.agent/workflows/enhance.md +85 -0
  181. package/.agent/workflows/orchestrate.md +106 -0
  182. package/.agent/workflows/plan.md +105 -0
  183. package/.agent/workflows/pr-fix.md +163 -0
  184. package/.agent/workflows/pr-merge.md +117 -0
  185. package/.agent/workflows/pr-review.md +178 -0
  186. package/.agent/workflows/pr-split.md +118 -0
  187. package/.agent/workflows/pr.md +184 -0
  188. package/.agent/workflows/preflight.md +107 -0
  189. package/.agent/workflows/preview.md +95 -0
  190. package/.agent/workflows/quality-gate.md +103 -0
  191. package/.agent/workflows/retrospective.md +100 -0
  192. package/.agent/workflows/review.md +104 -0
  193. package/.agent/workflows/status.md +89 -0
  194. package/.agent/workflows/test.md +98 -0
  195. package/.agent/workflows/ui-ux-pro-max.md +93 -0
  196. package/.agent/workflows/upgrade.md +97 -0
  197. package/LICENSE +21 -0
  198. package/README.md +218 -0
  199. package/bin/kit.js +773 -0
  200. package/lib/agent-registry.js +228 -0
  201. package/lib/agent-reputation.js +343 -0
  202. package/lib/circuit-breaker.js +195 -0
  203. package/lib/cli-commands.js +322 -0
  204. package/lib/config-validator.js +274 -0
  205. package/lib/conflict-detector.js +252 -0
  206. package/lib/constants.js +47 -0
  207. package/lib/engineering-manager.js +336 -0
  208. package/lib/error-budget.js +370 -0
  209. package/lib/hook-system.js +256 -0
  210. package/lib/ide-generator.js +434 -0
  211. package/lib/identity.js +240 -0
  212. package/lib/io.js +146 -0
  213. package/lib/learning-engine.js +163 -0
  214. package/lib/loading-engine.js +421 -0
  215. package/lib/logger.js +118 -0
  216. package/lib/marketplace.js +321 -0
  217. package/lib/plugin-system.js +604 -0
  218. package/lib/plugin-verifier.js +197 -0
  219. package/lib/rate-limiter.js +113 -0
  220. package/lib/security-scanner.js +312 -0
  221. package/lib/self-healing.js +468 -0
  222. package/lib/session-manager.js +264 -0
  223. package/lib/skill-sandbox.js +244 -0
  224. package/lib/task-governance.js +522 -0
  225. package/lib/task-model.js +332 -0
  226. package/lib/updater.js +240 -0
  227. package/lib/verify.js +279 -0
  228. package/lib/workflow-engine.js +373 -0
  229. package/lib/workflow-events.js +166 -0
  230. package/lib/workflow-persistence.js +160 -0
  231. package/package.json +57 -0
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Devran AI Kit — Workflow Event Emitter
3
+ *
4
+ * Provides an event-driven interface for workflow state transitions.
5
+ * Enables reactive hook triggering and observability when the
6
+ * workflow engine changes phases.
7
+ *
8
+ * @module lib/workflow-events
9
+ * @author Emre Dursun
10
+ * @since v3.2.0
11
+ */
12
+
13
+ 'use strict';
14
+
15
+ const { EventEmitter } = require('events');
16
+
17
+ /**
18
+ * @typedef {object} WorkflowEvent
19
+ * @property {string} type - Event type
20
+ * @property {string} fromPhase - Source phase
21
+ * @property {string} toPhase - Target phase
22
+ * @property {string} trigger - What triggered the transition
23
+ * @property {string} timestamp - ISO timestamp
24
+ */
25
+
26
+ /** Singleton workflow event bus */
27
+ const workflowBus = new EventEmitter();
28
+
29
+ /** Event type constants */
30
+ const EVENTS = {
31
+ TRANSITION_START: 'workflow:transition:start',
32
+ TRANSITION_COMPLETE: 'workflow:transition:complete',
33
+ TRANSITION_FAILED: 'workflow:transition:failed',
34
+ PHASE_ENTERED: 'workflow:phase:entered',
35
+ WORKFLOW_RESET: 'workflow:reset',
36
+ };
37
+
38
+ /**
39
+ * Emits a transition start event.
40
+ *
41
+ * @param {string} fromPhase - Source phase
42
+ * @param {string} toPhase - Target phase
43
+ * @param {string} trigger - Transition trigger
44
+ * @returns {void}
45
+ */
46
+ function emitTransitionStart(fromPhase, toPhase, trigger) {
47
+ const event = {
48
+ type: EVENTS.TRANSITION_START,
49
+ fromPhase,
50
+ toPhase,
51
+ trigger,
52
+ timestamp: new Date().toISOString(),
53
+ };
54
+ workflowBus.emit(EVENTS.TRANSITION_START, event);
55
+ }
56
+
57
+ /**
58
+ * Emits a transition complete event.
59
+ *
60
+ * @param {string} fromPhase - Source phase
61
+ * @param {string} toPhase - Target phase
62
+ * @param {string} trigger - Transition trigger
63
+ * @returns {void}
64
+ */
65
+ function emitTransitionComplete(fromPhase, toPhase, trigger) {
66
+ const event = {
67
+ type: EVENTS.TRANSITION_COMPLETE,
68
+ fromPhase,
69
+ toPhase,
70
+ trigger,
71
+ timestamp: new Date().toISOString(),
72
+ };
73
+ workflowBus.emit(EVENTS.TRANSITION_COMPLETE, event);
74
+ workflowBus.emit(EVENTS.PHASE_ENTERED, { ...event, type: EVENTS.PHASE_ENTERED, phase: toPhase });
75
+ }
76
+
77
+ /**
78
+ * Emits a transition failed event.
79
+ *
80
+ * @param {string} fromPhase - Source phase
81
+ * @param {string} toPhase - Target phase
82
+ * @param {string} error - Error message
83
+ * @returns {void}
84
+ */
85
+ function emitTransitionFailed(fromPhase, toPhase, error) {
86
+ const event = {
87
+ type: EVENTS.TRANSITION_FAILED,
88
+ fromPhase,
89
+ toPhase,
90
+ trigger: '',
91
+ error,
92
+ timestamp: new Date().toISOString(),
93
+ };
94
+ workflowBus.emit(EVENTS.TRANSITION_FAILED, event);
95
+ }
96
+
97
+ /**
98
+ * Emits a workflow reset event.
99
+ *
100
+ * @param {string} previousPhase - Phase before reset
101
+ * @returns {void}
102
+ */
103
+ function emitWorkflowReset(previousPhase) {
104
+ const event = {
105
+ type: EVENTS.WORKFLOW_RESET,
106
+ fromPhase: previousPhase,
107
+ toPhase: 'IDLE',
108
+ trigger: 'reset',
109
+ timestamp: new Date().toISOString(),
110
+ };
111
+ workflowBus.emit(EVENTS.WORKFLOW_RESET, event);
112
+ }
113
+
114
+ /**
115
+ * Subscribes to a workflow event.
116
+ *
117
+ * @param {string} eventType - Event type from EVENTS
118
+ * @param {Function} handler - Event handler
119
+ * @returns {void}
120
+ */
121
+ function on(eventType, handler) {
122
+ workflowBus.on(eventType, handler);
123
+ }
124
+
125
+ /**
126
+ * Subscribes to a workflow event once.
127
+ *
128
+ * @param {string} eventType - Event type from EVENTS
129
+ * @param {Function} handler - Event handler
130
+ * @returns {void}
131
+ */
132
+ function once(eventType, handler) {
133
+ workflowBus.once(eventType, handler);
134
+ }
135
+
136
+ /**
137
+ * Removes an event listener.
138
+ *
139
+ * @param {string} eventType - Event type
140
+ * @param {Function} handler - Handler to remove
141
+ * @returns {void}
142
+ */
143
+ function off(eventType, handler) {
144
+ workflowBus.off(eventType, handler);
145
+ }
146
+
147
+ /**
148
+ * Removes all listeners for testing cleanup.
149
+ *
150
+ * @returns {void}
151
+ */
152
+ function removeAllListeners() {
153
+ workflowBus.removeAllListeners();
154
+ }
155
+
156
+ module.exports = {
157
+ EVENTS,
158
+ emitTransitionStart,
159
+ emitTransitionComplete,
160
+ emitTransitionFailed,
161
+ emitWorkflowReset,
162
+ on,
163
+ once,
164
+ off,
165
+ removeAllListeners,
166
+ };
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Devran AI Kit — Workflow Persistence
3
+ *
4
+ * Extends the workflow engine with checkpoint/resume capability.
5
+ * Workflow state survives across agent sessions via JSON file snapshots.
6
+ *
7
+ * @module lib/workflow-persistence
8
+ * @author Emre Dursun
9
+ * @since v3.0.0
10
+ */
11
+
12
+ 'use strict';
13
+
14
+ const fs = require('fs');
15
+ const path = require('path');
16
+ const crypto = require('crypto');
17
+ const workflowEngine = require('./workflow-engine');
18
+
19
+ const { AGENT_DIR, ENGINE_DIR } = require('./constants');
20
+ const { writeJsonAtomic } = require('./io');
21
+ const CHECKPOINTS_DIR = 'checkpoints';
22
+
23
+ /**
24
+ * Resolves the checkpoints directory path.
25
+ *
26
+ * @param {string} projectRoot - Root directory of the project
27
+ * @returns {string} Absolute path to checkpoints directory
28
+ */
29
+ function resolveCheckpointsDir(projectRoot) {
30
+ return path.join(projectRoot, AGENT_DIR, ENGINE_DIR, CHECKPOINTS_DIR);
31
+ }
32
+
33
+ /**
34
+ * Creates a checkpoint of the current workflow state.
35
+ *
36
+ * @param {string} projectRoot - Root directory of the project
37
+ * @param {string} [label] - Optional human-readable label
38
+ * @returns {{ checkpointId: string, filePath: string, timestamp: string }}
39
+ */
40
+ function createCheckpoint(projectRoot, label) {
41
+ const { state } = workflowEngine.loadWorkflowState(projectRoot);
42
+ const checkpointsDir = resolveCheckpointsDir(projectRoot);
43
+
44
+ const timestamp = new Date().toISOString();
45
+ const checkpointId = crypto.randomUUID().slice(0, 8);
46
+
47
+ const checkpoint = {
48
+ id: checkpointId,
49
+ label: label || `Checkpoint at ${state.currentPhase}`,
50
+ timestamp,
51
+ phase: state.currentPhase,
52
+ state: JSON.parse(JSON.stringify(state)),
53
+ };
54
+
55
+ const filePath = path.join(checkpointsDir, `${checkpointId}.json`);
56
+ writeJsonAtomic(filePath, checkpoint);
57
+
58
+ return { checkpointId, filePath, timestamp };
59
+ }
60
+
61
+ /**
62
+ * Lists all available checkpoints, sorted by timestamp (newest first).
63
+ *
64
+ * @param {string} projectRoot - Root directory of the project
65
+ * @returns {Array<{ id: string, label: string, phase: string, timestamp: string }>}
66
+ */
67
+ function listCheckpoints(projectRoot) {
68
+ const checkpointsDir = resolveCheckpointsDir(projectRoot);
69
+
70
+ if (!fs.existsSync(checkpointsDir)) {
71
+ return [];
72
+ }
73
+
74
+ const files = fs.readdirSync(checkpointsDir).filter((f) => f.endsWith('.json'));
75
+
76
+ return files
77
+ .map((file) => {
78
+ try {
79
+ const data = JSON.parse(fs.readFileSync(path.join(checkpointsDir, file), 'utf-8'));
80
+ return { id: data.id, label: data.label, phase: data.phase, timestamp: data.timestamp };
81
+ } catch {
82
+ return null;
83
+ }
84
+ })
85
+ .filter(Boolean)
86
+ .sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
87
+ }
88
+
89
+ /**
90
+ * Restores workflow state from a checkpoint.
91
+ *
92
+ * @param {string} projectRoot - Root directory of the project
93
+ * @param {string} checkpointId - ID of the checkpoint to restore
94
+ * @returns {{ success: boolean, restoredPhase: string }}
95
+ */
96
+ function resumeFromCheckpoint(projectRoot, checkpointId) {
97
+ const checkpointsDir = resolveCheckpointsDir(projectRoot);
98
+ const filePath = path.join(checkpointsDir, `${checkpointId}.json`);
99
+
100
+ if (!fs.existsSync(filePath)) {
101
+ throw new Error(`Checkpoint not found: ${checkpointId}`);
102
+ }
103
+
104
+ const checkpoint = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
105
+ const statePath = path.join(projectRoot, AGENT_DIR, ENGINE_DIR, 'workflow-state.json');
106
+
107
+ // Create restored state with appended history (H-9: immutable — no mutation of checkpoint)
108
+ const restoredState = {
109
+ ...checkpoint.state,
110
+ history: [
111
+ ...(checkpoint.state.history || []),
112
+ {
113
+ from: 'RESTORED',
114
+ to: checkpoint.state.currentPhase,
115
+ trigger: `Restored from checkpoint ${checkpointId}`,
116
+ timestamp: new Date().toISOString(),
117
+ },
118
+ ],
119
+ };
120
+
121
+ writeJsonAtomic(statePath, restoredState);
122
+
123
+ return { success: true, restoredPhase: checkpoint.state.currentPhase };
124
+ }
125
+
126
+ /**
127
+ * Returns a rich summary of the current workflow state.
128
+ *
129
+ * @param {string} projectRoot - Root directory of the project
130
+ * @returns {object} Workflow summary with phase durations and checkpoint count
131
+ */
132
+ function getWorkflowSummary(projectRoot) {
133
+ const { state } = workflowEngine.loadWorkflowState(projectRoot);
134
+ const checkpoints = listCheckpoints(projectRoot);
135
+ const history = state.history || [];
136
+
137
+ const phaseDurations = {};
138
+ for (const [phaseName, phaseData] of Object.entries(state.phases || {})) {
139
+ if (phaseData.startedAt && phaseData.completedAt) {
140
+ const duration = new Date(phaseData.completedAt).getTime() - new Date(phaseData.startedAt).getTime();
141
+ phaseDurations[phaseName] = Math.round(duration / 1000);
142
+ }
143
+ }
144
+
145
+ return {
146
+ currentPhase: state.currentPhase,
147
+ startedAt: state.startedAt,
148
+ transitionCount: history.length,
149
+ checkpointCount: checkpoints.length,
150
+ phaseDurations,
151
+ lastTransition: history.length > 0 ? history[history.length - 1] : null,
152
+ };
153
+ }
154
+
155
+ module.exports = {
156
+ createCheckpoint,
157
+ listCheckpoints,
158
+ resumeFromCheckpoint,
159
+ getWorkflowSummary,
160
+ };
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@devran-ai/kit",
3
+ "version": "4.1.0",
4
+ "description": "Trust-grade AI development framework — zero-dependency runtime engine for agent orchestration, workflow governance, and skill management.",
5
+ "main": "bin/kit.js",
6
+ "bin": {
7
+ "kit": "./bin/kit.js"
8
+ },
9
+ "scripts": {
10
+ "test": "vitest run",
11
+ "test:watch": "vitest watch",
12
+ "preversion": "npm test",
13
+ "version": "node scripts/sync-version.js && git add -A -- . ':!.agent/engine/identity.json'",
14
+ "prepublishOnly": "node scripts/clean-identity.js",
15
+ "postinstall": "echo 'Devran AI Kit installed. Run: kit init'"
16
+ },
17
+ "keywords": [
18
+ "ai",
19
+ "agents",
20
+ "gemini",
21
+ "claude",
22
+ "devran-ai",
23
+ "kit",
24
+ "governance",
25
+ "development",
26
+ "workflow",
27
+ "skills",
28
+ "commands",
29
+ "devtools",
30
+ "productivity",
31
+ "cli"
32
+ ],
33
+ "author": "Emre Dursun <info.emredursun@gmail.com>",
34
+ "license": "MIT",
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "git+https://github.com/devran-ai/kit.git"
38
+ },
39
+ "bugs": {
40
+ "url": "https://github.com/devran-ai/kit/issues"
41
+ },
42
+ "homepage": "https://github.com/devran-ai/kit#readme",
43
+ "engines": {
44
+ "node": ">=18.0.0",
45
+ "npm": ">=9.0.0"
46
+ },
47
+ "files": [
48
+ "bin/",
49
+ "lib/",
50
+ ".agent/",
51
+ "README.md",
52
+ "LICENSE"
53
+ ],
54
+ "devDependencies": {
55
+ "vitest": "^4.1.0"
56
+ }
57
+ }