@felixdotgo/aidlc-kit 0.1.1 → 0.3.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 (198) hide show
  1. package/DEVELOPMENT.md +14 -13
  2. package/README.md +37 -43
  3. package/dist/assets/.agents/aidlc/docker/Dockerfile.claude +7 -0
  4. package/dist/assets/.agents/aidlc/docker/Dockerfile.codex +9 -0
  5. package/dist/assets/.agents/aidlc/docker/Dockerfile.opencode +8 -0
  6. package/dist/assets/.agents/aidlc/orchestrator.md +2 -2
  7. package/dist/assets/.agents/aidlc/phase-clarify.md +1 -1
  8. package/dist/assets/.agents/aidlc/phase-plan.md +2 -2
  9. package/dist/assets/.agents/aidlc/schemas/config.schema.json +2 -1
  10. package/dist/assets/.agents/aidlc/schemas/state.schema.json +2 -0
  11. package/dist/assets/.agents/aidlc/scripts/lib/assignment-store.mjs +94 -48
  12. package/dist/assets/.agents/aidlc/scripts/lib/context-runtime.mjs +5 -4
  13. package/dist/assets/.agents/aidlc/scripts/lib/loop-authority.mjs +261 -0
  14. package/dist/assets/.agents/aidlc/scripts/lib/loop-commit-message.mjs +45 -0
  15. package/dist/assets/.agents/aidlc/scripts/lib/loop-daemon.mjs +206 -0
  16. package/dist/assets/.agents/aidlc/scripts/lib/loop-drivers.mjs +100 -14
  17. package/dist/assets/.agents/aidlc/scripts/lib/loop-env.mjs +279 -0
  18. package/dist/assets/.agents/aidlc/scripts/lib/loop-fleet-cli.mjs +105 -32
  19. package/dist/assets/.agents/aidlc/scripts/lib/loop-fleet-remote.mjs +17 -1
  20. package/dist/assets/.agents/aidlc/scripts/lib/loop-fleet-supervisor.mjs +24 -7
  21. package/dist/assets/.agents/aidlc/scripts/lib/loop-fleet.mjs +42 -16
  22. package/dist/assets/.agents/aidlc/scripts/lib/loop-git.mjs +20 -6
  23. package/dist/assets/.agents/aidlc/scripts/lib/loop-holder.mjs +376 -0
  24. package/dist/assets/.agents/aidlc/scripts/lib/loop-intake.mjs +33 -7
  25. package/dist/assets/.agents/aidlc/scripts/lib/loop-lease.mjs +67 -61
  26. package/dist/assets/.agents/aidlc/scripts/lib/loop-leases.mjs +268 -0
  27. package/dist/assets/.agents/aidlc/scripts/lib/loop-local-workers.mjs +116 -28
  28. package/dist/assets/.agents/aidlc/scripts/lib/loop-runtime.mjs +114 -12
  29. package/dist/assets/.agents/aidlc/scripts/lib/loop-stream.mjs +117 -0
  30. package/dist/assets/.agents/aidlc/scripts/lib/loop-supervisor-local.mjs +16 -56
  31. package/dist/assets/.agents/aidlc/scripts/lib/loop-supervisor-run-local.mjs +149 -6
  32. package/dist/assets/.agents/aidlc/scripts/lib/loop-supervisor.mjs +9 -1
  33. package/dist/assets/.agents/aidlc/scripts/lib/loop-worker-docker.mjs +44 -6
  34. package/dist/assets/.agents/aidlc/scripts/lib/loop-worker-image.mjs +64 -0
  35. package/dist/assets/.agents/aidlc/scripts/lib/loop-worker-log.mjs +158 -0
  36. package/dist/assets/.agents/aidlc/scripts/lib/repo-head.mjs +22 -0
  37. package/dist/assets/.agents/aidlc/scripts/lib/store.mjs +68 -2
  38. package/dist/assets/.agents/aidlc/scripts/lib/task-runtime-migrate.mjs +75 -0
  39. package/dist/assets/.agents/aidlc/scripts/lib/task-runtime.mjs +97 -0
  40. package/dist/assets/.agents/aidlc/scripts/loop-entry.mjs +168 -73
  41. package/dist/assets/.agents/aidlc/scripts/loop-gate.mjs +19 -7
  42. package/dist/assets/.agents/aidlc/scripts/loop.cmd +101 -0
  43. package/dist/assets/.agents/aidlc/scripts/loop.mjs +2 -1
  44. package/dist/assets/.agents/aidlc/scripts/loop.sh +71 -0
  45. package/dist/assets/.agents/aidlc/scripts/remote-state.mjs +10 -4
  46. package/dist/assets/.agents/aidlc/scripts/state.mjs +16 -8
  47. package/dist/assets/.agents/aidlc/templates/design.md +9 -0
  48. package/dist/assets/.agents/aidlc/templates/intent.md +4 -0
  49. package/dist/assets/.agents/aidlc/templates/workplan.md +1 -1
  50. package/dist/assets/.agents/skills/aidlc-plan/SKILL.md +1 -1
  51. package/dist/assets/ui/bulma.min.css +3 -0
  52. package/dist/assets/ui/changes.js +83 -0
  53. package/dist/assets/ui/common.js +664 -0
  54. package/dist/assets/ui/dashboard.css +636 -0
  55. package/dist/assets/ui/dashboard.js +77 -0
  56. package/dist/assets/ui/detail.js +159 -0
  57. package/dist/assets/ui/live-log.js +332 -0
  58. package/dist/services/aidlc-coordination/Dockerfile +11 -3
  59. package/dist/services/aidlc-coordination/compose.yaml +12 -0
  60. package/dist/services/aidlc-coordination/package-lock.json +3 -1
  61. package/dist/services/aidlc-coordination/package.json +9 -4
  62. package/dist/services/aidlc-coordination/src/lifecycle-core.mjs +68 -2
  63. package/dist/services/aidlc-coordination/src/repository.mjs +66 -0
  64. package/dist/services/aidlc-coordination/src/server.mjs +9 -3
  65. package/dist/services/aidlc-coordination/test/fleet.test.mjs +21 -0
  66. package/dist/services/aidlc-coordination/test/server-health-auth.test.mjs +67 -0
  67. package/dist/src/adapters.d.ts +0 -3
  68. package/dist/src/adapters.js +3 -5
  69. package/dist/src/cli/argv.d.ts +12 -0
  70. package/dist/src/cli/argv.js +68 -0
  71. package/dist/src/cli/commands.d.ts +8 -0
  72. package/dist/src/cli/commands.js +159 -0
  73. package/dist/src/cli/loop-launcher.d.ts +47 -0
  74. package/dist/src/cli/loop-launcher.js +322 -0
  75. package/dist/src/cli/options.d.ts +25 -0
  76. package/dist/src/cli/options.js +32 -0
  77. package/dist/src/cli/prompt.d.ts +9 -0
  78. package/dist/src/cli/prompt.js +66 -0
  79. package/dist/src/cli.js +28 -191
  80. package/dist/src/gate.js +3 -2
  81. package/dist/src/installer.d.ts +14 -7
  82. package/dist/src/installer.js +42 -143
  83. package/dist/src/legacy.js +1 -0
  84. package/dist/src/managed-content.d.ts +7 -0
  85. package/dist/src/managed-content.js +15 -4
  86. package/dist/src/managed-planning.d.ts +65 -0
  87. package/dist/src/managed-planning.js +219 -0
  88. package/dist/src/mcp-setup.js +3 -1
  89. package/dist/src/model/config-contracts.d.ts +65 -0
  90. package/dist/src/model/config-contracts.js +1 -0
  91. package/dist/src/model/install-contracts.d.ts +29 -0
  92. package/dist/src/model/install-contracts.js +1 -0
  93. package/dist/src/model/lifecycle-enums.d.ts +13 -0
  94. package/dist/src/model/lifecycle-enums.js +1 -0
  95. package/dist/src/model/loop.d.ts +20 -0
  96. package/dist/src/model/loop.js +1 -0
  97. package/dist/src/model/manifest.d.ts +16 -0
  98. package/dist/src/model/manifest.js +1 -0
  99. package/dist/src/model/records.d.ts +142 -0
  100. package/dist/src/model/records.js +1 -0
  101. package/dist/src/model.d.ts +11 -264
  102. package/dist/src/model.js +1 -1
  103. package/dist/src/profiles.d.ts +2 -0
  104. package/dist/src/profiles.js +53 -9
  105. package/dist/src/state/archive-record.d.ts +9 -0
  106. package/dist/src/state/archive-record.js +26 -0
  107. package/dist/src/state/commands.d.ts +18 -0
  108. package/dist/src/state/commands.js +27 -0
  109. package/dist/src/state/domain.d.ts +9 -0
  110. package/dist/src/state/domain.js +9 -0
  111. package/dist/src/state/guards.d.ts +7 -0
  112. package/dist/src/state/guards.js +17 -0
  113. package/dist/src/state/io.d.ts +10 -0
  114. package/dist/src/state/io.js +35 -0
  115. package/dist/src/state/items.d.ts +3 -4
  116. package/dist/src/state/items.js +58 -57
  117. package/dist/src/state/lessons.js +14 -7
  118. package/dist/src/state/lifecycle.js +2 -2
  119. package/dist/src/state/lock.js +7 -6
  120. package/dist/src/state/memory.js +24 -12
  121. package/dist/src/state/{archive.js → migrate.js} +7 -7
  122. package/dist/src/state/partition.d.ts +15 -0
  123. package/dist/src/state/partition.js +90 -0
  124. package/dist/src/state/paths.d.ts +11 -0
  125. package/dist/src/state/paths.js +12 -0
  126. package/dist/src/state/render.js +9 -6
  127. package/dist/src/state/store.js +9 -15
  128. package/dist/src/state/transitions.js +9 -7
  129. package/dist/src/state/validate.js +55 -7
  130. package/dist/src/state.d.ts +16 -11
  131. package/dist/src/state.js +16 -11
  132. package/dist/src/task-ui.d.ts +33 -0
  133. package/dist/src/task-ui.js +33 -0
  134. package/dist/src/ui/assets.d.ts +14 -0
  135. package/dist/src/ui/assets.js +45 -0
  136. package/dist/src/ui/changes.d.ts +83 -0
  137. package/dist/src/ui/changes.js +498 -0
  138. package/dist/src/ui/containers.d.ts +71 -0
  139. package/dist/src/ui/containers.js +214 -0
  140. package/dist/src/ui/daemon.d.ts +75 -0
  141. package/dist/src/ui/daemon.js +232 -0
  142. package/dist/src/ui/data.d.ts +42 -0
  143. package/dist/src/ui/data.js +89 -0
  144. package/dist/src/ui/docs.d.ts +13 -0
  145. package/dist/src/ui/docs.js +39 -0
  146. package/dist/src/ui/files.d.ts +3 -0
  147. package/dist/src/ui/files.js +20 -0
  148. package/dist/src/ui/http.d.ts +14 -0
  149. package/dist/src/ui/http.js +80 -0
  150. package/dist/src/ui/live.d.ts +5 -0
  151. package/dist/src/ui/live.js +43 -0
  152. package/dist/src/ui/markdown.d.ts +2 -0
  153. package/dist/src/ui/markdown.js +127 -0
  154. package/dist/src/ui/options.d.ts +48 -0
  155. package/dist/src/ui/options.js +81 -0
  156. package/dist/src/ui/security.d.ts +34 -0
  157. package/dist/src/ui/security.js +38 -0
  158. package/dist/src/ui/server.d.ts +39 -0
  159. package/dist/src/ui/server.js +347 -0
  160. package/dist/src/ui/sse.d.ts +14 -0
  161. package/dist/src/ui/sse.js +281 -0
  162. package/dist/src/ui/views/board.d.ts +7 -0
  163. package/dist/src/ui/views/board.js +131 -0
  164. package/dist/src/ui/views/changes.d.ts +19 -0
  165. package/dist/src/ui/views/changes.js +154 -0
  166. package/dist/src/ui/views/components.d.ts +56 -0
  167. package/dist/src/ui/views/components.js +113 -0
  168. package/dist/src/ui/views/docs.d.ts +15 -0
  169. package/dist/src/ui/views/docs.js +64 -0
  170. package/dist/src/ui/views/layout.d.ts +44 -0
  171. package/dist/src/ui/views/layout.js +233 -0
  172. package/dist/src/ui/views/task.d.ts +25 -0
  173. package/dist/src/ui/views/task.js +320 -0
  174. package/dist/src/upgrade-board.js +10 -10
  175. package/dist/src/upgrade.d.ts +0 -1
  176. package/dist/src/upgrade.js +24 -85
  177. package/dist/src/workflow.d.ts +4 -0
  178. package/dist/src/workflow.js +36 -4
  179. package/docs/README.md +41 -22
  180. package/docs/architecture.md +101 -37
  181. package/docs/command-reference.md +289 -52
  182. package/docs/configuration.md +70 -30
  183. package/docs/coordination-service.md +91 -30
  184. package/docs/design-decisions.md +87 -0
  185. package/docs/development.md +124 -49
  186. package/docs/loop-local-run.md +228 -0
  187. package/docs/loop-runbook.md +214 -0
  188. package/docs/operating-workflow.md +55 -42
  189. package/docs/testing-and-release.md +72 -49
  190. package/docs/troubleshooting.md +221 -0
  191. package/package.json +4 -1
  192. package/dist/src/ledger.d.ts +0 -22
  193. package/dist/src/ledger.js +0 -119
  194. package/dist/src/state/shared.d.ts +0 -29
  195. package/dist/src/state/shared.js +0 -71
  196. package/dist/src/tracker.d.ts +0 -36
  197. package/dist/src/tracker.js +0 -44
  198. /package/dist/src/state/{archive.d.ts → migrate.d.ts} +0 -0
@@ -0,0 +1,65 @@
1
+ import type { AgentId, RiskLevel, StateMutationMode } from "./lifecycle-enums.js";
2
+ import type { LoopConfig } from "./loop.js";
3
+ export interface CommandSpec {
4
+ command: string;
5
+ args: string[];
6
+ }
7
+ export interface Profile {
8
+ schemaVersion: 1;
9
+ id: string;
10
+ extends?: string[];
11
+ topology: string;
12
+ discovery?: {
13
+ roots?: string[];
14
+ workspaceMarkers?: string[];
15
+ };
16
+ specs?: {
17
+ roots?: string[];
18
+ };
19
+ commands?: Record<string, CommandSpec>;
20
+ rules?: {
21
+ include?: string[];
22
+ };
23
+ }
24
+ export interface ProjectConfig {
25
+ $schema?: string;
26
+ schemaVersion: 1 | 2 | 3;
27
+ extends: string[];
28
+ specs: {
29
+ roots: string[];
30
+ };
31
+ commands: Record<string, CommandSpec>;
32
+ rules: {
33
+ include: string[];
34
+ };
35
+ risk: {
36
+ default: RiskLevel;
37
+ };
38
+ context: {
39
+ maxChars: number;
40
+ };
41
+ agentState: Partial<Record<AgentId, StateMutationMode>>;
42
+ tracker?: TrackerConfig;
43
+ mcp: McpConfig;
44
+ loop?: LoopConfig;
45
+ }
46
+ export interface McpConfig {
47
+ enabled: boolean;
48
+ endpoint?: string;
49
+ workspace?: string;
50
+ tokenEnv?: string;
51
+ pollMs?: number;
52
+ providers?: Array<"jira" | "trello" | "github-issues">;
53
+ }
54
+ export interface TrackerConfig {
55
+ enabled: boolean;
56
+ provider: "backlog";
57
+ spaceUrl: string;
58
+ project: string;
59
+ tokenEnv: string;
60
+ workflow: "waterfall" | "scrum";
61
+ mapping: {
62
+ statuses?: Partial<Record<"clarify" | "plan" | "build" | "wrap" | "done", number>>;
63
+ gateFieldId?: number;
64
+ };
65
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,29 @@
1
+ import type { AgentId } from "./lifecycle-enums.js";
2
+ import type { LoopConfig } from "./loop.js";
3
+ export interface FileSpec {
4
+ path: string;
5
+ content: string;
6
+ owner: string;
7
+ strategy?: "replace" | "managed-block";
8
+ ownershipClass?: "managed" | "project" | "state";
9
+ }
10
+ export interface Adapter {
11
+ id: AgentId;
12
+ displayName: string;
13
+ detect(root: string): boolean;
14
+ files(): FileSpec[];
15
+ }
16
+ export interface PlannedWrite extends FileSpec {
17
+ action: "create" | "update" | "delete" | "skip" | "conflict" | "migrate" | "preserve";
18
+ reason: string;
19
+ contentEncoding?: "base64";
20
+ }
21
+ export interface InitOptions {
22
+ root: string;
23
+ agents: AgentId[];
24
+ all: boolean;
25
+ dryRun: boolean;
26
+ yes: boolean;
27
+ force: boolean;
28
+ loop?: LoopConfig;
29
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,13 @@
1
+ export type AgentId = string;
2
+ export type StateMutationMode = "native" | "scripted";
3
+ export type Phase = "clarify" | "plan" | "build" | "wrap" | "done";
4
+ export type Gate = "none" | "G0_confirm" | "G1_review" | "G2_codereview";
5
+ export type TaskStatus = "active" | "blocked_on_user" | "paused" | "done" | "closed" | "superseded";
6
+ export type RiskLevel = "low" | "normal" | "high" | "regulated";
7
+ export type DecisionStatus = "unresolved" | "approved" | "changed" | "dropped";
8
+ export type HandoffKind = "repair_exhausted" | "review_exhausted" | "g2_failed" | "release_failed" | "structural_change" | "other";
9
+ export interface Diagnostic {
10
+ level: "ERROR" | "WARN" | "INFO";
11
+ code: string;
12
+ message: string;
13
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,20 @@
1
+ export type LoopMode = "off" | "local" | "fleet";
2
+ export declare const LOOP_PROVIDERS: readonly ["codex", "claude", "opencode"];
3
+ export type LoopAgent = (typeof LOOP_PROVIDERS)[number];
4
+ export interface LoopConfig {
5
+ mode: LoopMode;
6
+ agents?: {
7
+ lead: LoopAgent;
8
+ workers: Record<string, LoopAgent>;
9
+ };
10
+ workerImage?: Partial<Record<LoopAgent, string>>;
11
+ /** Local daemon canonical-state poll interval (1000–300000 ms). */
12
+ pollMs?: number;
13
+ /** Per-run lead loop limits; bounds mirror `validateLimits` in loop-runtime.mjs. */
14
+ limits?: LoopLimits;
15
+ }
16
+ export interface LoopLimits {
17
+ maxTurns?: number;
18
+ turnTimeoutMs?: number;
19
+ maxStallTurns?: number;
20
+ }
@@ -0,0 +1 @@
1
+ export const LOOP_PROVIDERS = Object.freeze(["codex", "claude", "opencode"]);
@@ -0,0 +1,16 @@
1
+ import type { AgentId } from "./lifecycle-enums.js";
2
+ export interface ManifestInventoryItem {
3
+ hash: string;
4
+ owner: string;
5
+ strategy: "replace" | "managed-block";
6
+ }
7
+ export interface WorkflowManifest {
8
+ schemaVersion: 2;
9
+ packageVersion: string;
10
+ workflow: "AI-DLC";
11
+ source: "local-package-assets";
12
+ remoteUpdates: false;
13
+ managedBy: "aidlc-kit" | "aidlc-workflow";
14
+ adapters: AgentId[];
15
+ files: Record<string, ManifestInventoryItem>;
16
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,142 @@
1
+ import type { DecisionStatus, Gate, HandoffKind, Phase, RiskLevel, TaskStatus } from "./lifecycle-enums.js";
2
+ export interface TaskDecision {
3
+ id: string;
4
+ label: string;
5
+ status: DecisionStatus;
6
+ resolution?: string;
7
+ }
8
+ export interface Evidence {
9
+ kind: "approval" | "spec" | "test" | "lint" | "review" | "diagnostic";
10
+ gate?: Gate;
11
+ area?: string;
12
+ source: string;
13
+ result: "pass" | "fail" | "skip";
14
+ detail?: string;
15
+ recordedAt: string;
16
+ }
17
+ export interface LessonRecord {
18
+ id: string;
19
+ taskId: string;
20
+ areas: string[];
21
+ summary: string;
22
+ prevention: string;
23
+ example: string;
24
+ promotion: string;
25
+ source: string;
26
+ recordedAt: string;
27
+ }
28
+ export interface LessonDisposition {
29
+ status: "captured" | "none";
30
+ reason?: string;
31
+ source: string;
32
+ recordedAt: string;
33
+ }
34
+ export interface TaskState {
35
+ id: string;
36
+ featureId?: string;
37
+ title: string;
38
+ type: "feature" | "bug" | "refactor" | "infra";
39
+ phase: Phase;
40
+ gate: Gate;
41
+ status: TaskStatus;
42
+ language: "vi" | "en";
43
+ risk: RiskLevel;
44
+ areas: string[];
45
+ branch: string;
46
+ artifacts: {
47
+ intent?: string;
48
+ design?: string;
49
+ workplan?: string;
50
+ };
51
+ decisions: TaskDecision[];
52
+ tasks: Array<{
53
+ id: string;
54
+ label: string;
55
+ status: "todo" | "in_progress" | "done" | "deferred";
56
+ dependsOn?: string[];
57
+ ownedPaths?: string[];
58
+ }>;
59
+ evidence: Evidence[];
60
+ lessons?: LessonRecord[];
61
+ lessonDisposition?: LessonDisposition;
62
+ handoff?: {
63
+ kind: HandoffKind;
64
+ reason: string;
65
+ source: string;
66
+ recordedAt: string;
67
+ };
68
+ closure?: {
69
+ reason: string;
70
+ source: string;
71
+ recordedAt: string;
72
+ };
73
+ legacyG2Wait?: {
74
+ migratedAt: string;
75
+ source: string;
76
+ };
77
+ predecessorTaskId?: string;
78
+ successorTaskId?: string;
79
+ /** Repository HEAD when the task was created (lowercase hex SHA, 7-64 chars). */
80
+ baseCommit?: string;
81
+ /** Repository HEAD when the task reached done (lowercase hex SHA, 7-64 chars). */
82
+ finalCommit?: string;
83
+ createdAt: string;
84
+ updatedAt: string;
85
+ }
86
+ export interface WorkflowState {
87
+ schemaVersion: 1 | 2 | 3 | 4;
88
+ tasks: Record<string, TaskState>;
89
+ archive?: Record<string, ArchivedTaskSummary>;
90
+ }
91
+ export interface ArchivedTaskSummary {
92
+ id: string;
93
+ title: string;
94
+ type: TaskState["type"];
95
+ phase: Phase;
96
+ gate: Gate;
97
+ status: "done" | "closed" | "superseded";
98
+ risk: RiskLevel;
99
+ areas: string[];
100
+ record: string;
101
+ digest: string;
102
+ lessonCount: number;
103
+ predecessorTaskId?: string;
104
+ successorTaskId?: string;
105
+ createdAt: string;
106
+ updatedAt: string;
107
+ }
108
+ export interface LessonIndexEntry {
109
+ id: string;
110
+ taskId: string;
111
+ areas: string[];
112
+ summary: string;
113
+ prevention: string;
114
+ source: string;
115
+ recordedAt: string;
116
+ }
117
+ export interface LessonIndex {
118
+ schemaVersion: 1;
119
+ sourceDigest: string;
120
+ lessons: LessonIndexEntry[];
121
+ }
122
+ export interface AgenticMemoryEntry {
123
+ id: string;
124
+ summary: string;
125
+ guidance: string;
126
+ areas: string[];
127
+ phases: Array<Exclude<Phase, "done"> | "*">;
128
+ priority: number;
129
+ sourceTaskId: string;
130
+ sourceLessonId: string;
131
+ approvedBy: string;
132
+ approvedAt: string;
133
+ }
134
+ export interface AgenticMemoryRegistry {
135
+ schemaVersion: 1;
136
+ entries: AgenticMemoryEntry[];
137
+ retired: Array<AgenticMemoryEntry & {
138
+ retiredBy: string;
139
+ retiredAt: string;
140
+ reason: string;
141
+ }>;
142
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -1,264 +1,11 @@
1
- export type AgentId = string;
2
- export type StateMutationMode = "native" | "scripted";
3
- export type Phase = "clarify" | "plan" | "build" | "wrap" | "done";
4
- export type Gate = "none" | "G0_confirm" | "G1_review" | "G2_codereview";
5
- export type TaskStatus = "active" | "blocked_on_user" | "paused" | "done" | "closed" | "superseded";
6
- export type RiskLevel = "low" | "normal" | "high" | "regulated";
7
- export type DecisionStatus = "unresolved" | "approved" | "changed" | "dropped";
8
- export type HandoffKind = "repair_exhausted" | "review_exhausted" | "g2_failed" | "release_failed" | "structural_change" | "other";
9
- export interface FileSpec {
10
- path: string;
11
- content: string;
12
- owner: string;
13
- strategy?: "replace" | "managed-block";
14
- ownershipClass?: "managed" | "project" | "state";
15
- }
16
- export interface Adapter {
17
- id: AgentId;
18
- displayName: string;
19
- detect(root: string): boolean;
20
- files(): FileSpec[];
21
- }
22
- export interface PlannedWrite extends FileSpec {
23
- action: "create" | "update" | "delete" | "skip" | "conflict" | "migrate" | "preserve";
24
- reason: string;
25
- contentEncoding?: "base64";
26
- }
27
- export interface InitOptions {
28
- root: string;
29
- agents: AgentId[];
30
- all: boolean;
31
- dryRun: boolean;
32
- yes: boolean;
33
- force: boolean;
34
- loop?: LoopConfig;
35
- }
36
- export type LoopMode = "off" | "local" | "fleet";
37
- export declare const LOOP_PROVIDERS: readonly ["codex", "claude", "opencode"];
38
- export type LoopAgent = (typeof LOOP_PROVIDERS)[number];
39
- export interface LoopConfig {
40
- mode: LoopMode;
41
- agents?: {
42
- lead: LoopAgent;
43
- workers: Record<string, LoopAgent>;
44
- };
45
- }
46
- export interface CommandSpec {
47
- command: string;
48
- args: string[];
49
- }
50
- export interface Profile {
51
- schemaVersion: 1;
52
- id: string;
53
- extends?: string[];
54
- topology: string;
55
- discovery?: {
56
- roots?: string[];
57
- workspaceMarkers?: string[];
58
- };
59
- specs?: {
60
- roots?: string[];
61
- };
62
- commands?: Record<string, CommandSpec>;
63
- rules?: {
64
- include?: string[];
65
- };
66
- }
67
- export interface ProjectConfig {
68
- schemaVersion: 1 | 2 | 3;
69
- extends: string[];
70
- specs: {
71
- roots: string[];
72
- };
73
- commands: Record<string, CommandSpec>;
74
- rules: {
75
- include: string[];
76
- };
77
- risk: {
78
- default: RiskLevel;
79
- };
80
- context: {
81
- maxChars: number;
82
- };
83
- agentState: Partial<Record<AgentId, StateMutationMode>>;
84
- tracker?: TrackerConfig;
85
- mcp: McpConfig;
86
- loop?: LoopConfig;
87
- }
88
- export interface McpConfig {
89
- enabled: boolean;
90
- endpoint?: string;
91
- workspace?: string;
92
- tokenEnv?: string;
93
- pollMs?: number;
94
- providers?: Array<"jira" | "trello" | "github-issues">;
95
- }
96
- export interface TrackerConfig {
97
- enabled: boolean;
98
- provider: "backlog";
99
- spaceUrl: string;
100
- project: string;
101
- tokenEnv: string;
102
- workflow: "waterfall" | "scrum";
103
- mapping: {
104
- statuses?: Partial<Record<"clarify" | "plan" | "build" | "wrap" | "done", number>>;
105
- gateFieldId?: number;
106
- };
107
- }
108
- export interface TaskDecision {
109
- id: string;
110
- label: string;
111
- status: DecisionStatus;
112
- resolution?: string;
113
- }
114
- export interface Evidence {
115
- kind: "approval" | "spec" | "test" | "lint" | "review" | "diagnostic";
116
- gate?: Gate;
117
- area?: string;
118
- source: string;
119
- result: "pass" | "fail" | "skip";
120
- detail?: string;
121
- recordedAt: string;
122
- }
123
- export interface LessonRecord {
124
- id: string;
125
- taskId: string;
126
- areas: string[];
127
- summary: string;
128
- prevention: string;
129
- example: string;
130
- promotion: string;
131
- source: string;
132
- recordedAt: string;
133
- }
134
- export interface LessonDisposition {
135
- status: "captured" | "none";
136
- reason?: string;
137
- source: string;
138
- recordedAt: string;
139
- }
140
- export interface TaskState {
141
- id: string;
142
- featureId?: string;
143
- title: string;
144
- type: "feature" | "bug" | "refactor" | "infra";
145
- phase: Phase;
146
- gate: Gate;
147
- status: TaskStatus;
148
- language: "vi" | "en";
149
- risk: RiskLevel;
150
- areas: string[];
151
- branch: string;
152
- artifacts: {
153
- intent?: string;
154
- design?: string;
155
- workplan?: string;
156
- };
157
- decisions: TaskDecision[];
158
- tasks: Array<{
159
- id: string;
160
- label: string;
161
- status: "todo" | "in_progress" | "done" | "deferred";
162
- dependsOn?: string[];
163
- ownedPaths?: string[];
164
- }>;
165
- evidence: Evidence[];
166
- lessons?: LessonRecord[];
167
- lessonDisposition?: LessonDisposition;
168
- handoff?: {
169
- kind: HandoffKind;
170
- reason: string;
171
- source: string;
172
- recordedAt: string;
173
- };
174
- closure?: {
175
- reason: string;
176
- source: string;
177
- recordedAt: string;
178
- };
179
- legacyG2Wait?: {
180
- migratedAt: string;
181
- source: string;
182
- };
183
- predecessorTaskId?: string;
184
- successorTaskId?: string;
185
- createdAt: string;
186
- updatedAt: string;
187
- }
188
- export interface WorkflowState {
189
- schemaVersion: 1 | 2 | 3 | 4;
190
- tasks: Record<string, TaskState>;
191
- archive?: Record<string, ArchivedTaskSummary>;
192
- }
193
- export interface ArchivedTaskSummary {
194
- id: string;
195
- title: string;
196
- type: TaskState["type"];
197
- phase: Phase;
198
- gate: Gate;
199
- status: "done" | "closed" | "superseded";
200
- risk: RiskLevel;
201
- areas: string[];
202
- record: string;
203
- digest: string;
204
- lessonCount: number;
205
- predecessorTaskId?: string;
206
- successorTaskId?: string;
207
- createdAt: string;
208
- updatedAt: string;
209
- }
210
- export interface LessonIndexEntry {
211
- id: string;
212
- taskId: string;
213
- areas: string[];
214
- summary: string;
215
- prevention: string;
216
- source: string;
217
- recordedAt: string;
218
- }
219
- export interface LessonIndex {
220
- schemaVersion: 1;
221
- sourceDigest: string;
222
- lessons: LessonIndexEntry[];
223
- }
224
- export interface AgenticMemoryEntry {
225
- id: string;
226
- summary: string;
227
- guidance: string;
228
- areas: string[];
229
- phases: Array<Exclude<Phase, "done"> | "*">;
230
- priority: number;
231
- sourceTaskId: string;
232
- sourceLessonId: string;
233
- approvedBy: string;
234
- approvedAt: string;
235
- }
236
- export interface AgenticMemoryRegistry {
237
- schemaVersion: 1;
238
- entries: AgenticMemoryEntry[];
239
- retired: Array<AgenticMemoryEntry & {
240
- retiredBy: string;
241
- retiredAt: string;
242
- reason: string;
243
- }>;
244
- }
245
- export interface ManifestInventoryItem {
246
- hash: string;
247
- owner: string;
248
- strategy: "replace" | "managed-block";
249
- }
250
- export interface WorkflowManifest {
251
- schemaVersion: 2;
252
- packageVersion: string;
253
- workflow: "AI-DLC";
254
- source: "local-package-assets";
255
- remoteUpdates: false;
256
- managedBy: "aidlc-kit" | "aidlc-workflow";
257
- adapters: AgentId[];
258
- files: Record<string, ManifestInventoryItem>;
259
- }
260
- export interface Diagnostic {
261
- level: "ERROR" | "WARN" | "INFO";
262
- code: string;
263
- message: string;
264
- }
1
+ /**
2
+ * Facade for the shared type hub. Behavior-preserving re-export of the split
3
+ * modules under `src/model/`; import paths from outside remain unchanged.
4
+ */
5
+ export type { AgentId, StateMutationMode, Phase, Gate, TaskStatus, RiskLevel, DecisionStatus, HandoffKind, Diagnostic } from "./model/lifecycle-enums.js";
6
+ export type { FileSpec, Adapter, PlannedWrite, InitOptions } from "./model/install-contracts.js";
7
+ export type { LoopMode, LoopAgent, LoopConfig, LoopLimits } from "./model/loop.js";
8
+ export { LOOP_PROVIDERS } from "./model/loop.js";
9
+ export type { CommandSpec, Profile, ProjectConfig, McpConfig, TrackerConfig } from "./model/config-contracts.js";
10
+ export type { TaskDecision, Evidence, LessonRecord, LessonDisposition, TaskState, WorkflowState, ArchivedTaskSummary, LessonIndexEntry, LessonIndex, AgenticMemoryEntry, AgenticMemoryRegistry } from "./model/records.js";
11
+ export type { ManifestInventoryItem, WorkflowManifest } from "./model/manifest.js";
package/dist/src/model.js CHANGED
@@ -1 +1 @@
1
- export const LOOP_PROVIDERS = Object.freeze(["codex", "claude", "opencode"]);
1
+ export { LOOP_PROVIDERS } from "./model/loop.js";
@@ -5,6 +5,8 @@ export declare const validateLoopConfig: (value: unknown) => LoopConfig;
5
5
  /** Validates a single profile file (built-in or local). */
6
6
  export declare const validateProfile: (value: unknown, label?: string) => Profile;
7
7
  export declare const defaultConfig: () => ProjectConfig;
8
+ /** Validates and normalizes a parsed `.agents/config.json` value. */
9
+ export declare const validateProjectConfig: (value: unknown) => ProjectConfig;
8
10
  /** Loads and validates `.agents/config.json`, falling back to the default config when absent. */
9
11
  export declare const loadProjectConfig: (root: string) => ProjectConfig;
10
12
  /** Resolves a list of profile ids into an ordered, cycle-free list of profiles. */