infra-kit 0.1.102 → 0.1.105
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/.eslintcache +1 -1
- package/.omc/state/agent-replay-0a58307d-2a37-4c69-851c-83a646502d62.jsonl +1 -0
- package/.omc/state/agent-replay-11c41aa0-51fa-49e1-a1dc-26dcd6ac26cc.jsonl +16 -0
- package/.omc/state/agent-replay-4cf1c186-81b2-497c-b002-d7f84e7839f3.jsonl +9 -0
- package/.omc/state/agent-replay-5c4ab554-64f1-42ae-83e3-21e0237e955c.jsonl +11 -0
- package/.omc/state/agent-replay-a60ac2ec-afbd-449f-a540-6df287392fc2.jsonl +1 -0
- package/.omc/state/agent-replay-be37e426-6fc8-47f4-8178-221c8494551c.jsonl +3 -0
- package/.omc/state/agent-replay-c967c819-3d1c-447b-ab48-56a8448ef9f8.jsonl +2 -0
- package/.omc/state/idle-notif-cooldown.json +3 -0
- package/.omc/state/last-tool-error.json +4 -4
- package/.omc/state/mission-state.json +53 -0
- package/.omc/state/sessions/0a58307d-2a37-4c69-851c-83a646502d62/pre-tool-advisory-throttle.json +18 -0
- package/.omc/state/sessions/0a58307d-2a37-4c69-851c-83a646502d62/subagent-tracking-state.json +7 -0
- package/.omc/state/sessions/11c41aa0-51fa-49e1-a1dc-26dcd6ac26cc/last-tool-error-state.json +7 -0
- package/.omc/state/sessions/11c41aa0-51fa-49e1-a1dc-26dcd6ac26cc/mission-state.json +117 -0
- package/.omc/state/sessions/11c41aa0-51fa-49e1-a1dc-26dcd6ac26cc/pre-tool-advisory-throttle.json +42 -0
- package/.omc/state/sessions/11c41aa0-51fa-49e1-a1dc-26dcd6ac26cc/subagent-tracking-state.json +53 -0
- package/.omc/state/sessions/4cf1c186-81b2-497c-b002-d7f84e7839f3/last-tool-error-state.json +7 -0
- package/.omc/state/sessions/4cf1c186-81b2-497c-b002-d7f84e7839f3/pre-tool-advisory-throttle.json +18 -0
- package/.omc/state/sessions/4cf1c186-81b2-497c-b002-d7f84e7839f3/subagent-tracking-state.json +7 -0
- package/.omc/state/sessions/5c4ab554-64f1-42ae-83e3-21e0237e955c/mission-state.json +117 -0
- package/.omc/state/sessions/5c4ab554-64f1-42ae-83e3-21e0237e955c/pre-tool-advisory-throttle.json +18 -0
- package/.omc/state/sessions/5c4ab554-64f1-42ae-83e3-21e0237e955c/subagent-tracking-state.json +17 -0
- package/.omc/state/sessions/a60ac2ec-afbd-449f-a540-6df287392fc2/pre-tool-advisory-throttle.json +18 -0
- package/.omc/state/sessions/a60ac2ec-afbd-449f-a540-6df287392fc2/subagent-tracking-state.json +7 -0
- package/.omc/state/sessions/c967c819-3d1c-447b-ab48-56a8448ef9f8/pre-tool-advisory-throttle.json +10 -0
- package/.omc/state/sessions/c967c819-3d1c-447b-ab48-56a8448ef9f8/subagent-tracking-state.json +7 -0
- package/.omc/state/subagent-tracking.json +14 -4
- package/.turbo/turbo-build.log +7 -0
- package/.turbo/turbo-check.log +14 -0
- package/.turbo/turbo-prettier-fix.log +2 -1
- package/.turbo/turbo-test.log +28 -5
- package/.turbo/turbo-validate.log +14 -0
- package/dist/cli.js +81 -74
- package/dist/cli.js.map +4 -4
- package/dist/entry/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +7 -0
- package/dist/lib/package-config/package-config.d.ts +71 -0
- package/dist/mcp.js +43 -41
- package/dist/mcp.js.map +4 -4
- package/eslint.config.js +1 -1
- package/infra-kit.config.ts +5 -0
- package/package.json +20 -13
- package/scripts/build.js +32 -3
- package/src/.omc/state/sessions/0a58307d-2a37-4c69-851c-83a646502d62/pre-tool-advisory-throttle.json +18 -0
- package/src/commands/.omc/state/sessions/c967c819-3d1c-447b-ab48-56a8448ef9f8/pre-tool-advisory-throttle.json +18 -0
- package/src/commands/audit/__tests__/audit.test.ts +59 -0
- package/src/commands/audit/audit.ts +177 -0
- package/src/commands/audit/index.ts +1 -0
- package/src/commands/config/config.ts +49 -7
- package/src/commands/doctor/doctor.ts +3 -3
- package/src/commands/env-clear/env-clear.ts +1 -1
- package/src/commands/env-list/env-list.ts +3 -3
- package/src/commands/env-load/env-load.ts +1 -1
- package/src/commands/env-status/env-status.ts +1 -1
- package/src/commands/gh-merge-dev/gh-merge-dev.ts +3 -8
- package/src/commands/gh-release-deliver/gh-release-deliver.ts +47 -21
- package/src/commands/gh-release-deploy-all/gh-release-deploy-all.ts +13 -7
- package/src/commands/gh-release-deploy-selected/gh-release-deploy-selected.ts +12 -6
- package/src/commands/gh-release-list/gh-release-list.ts +19 -8
- package/src/commands/init/__tests__/migrate-config.test.ts +160 -0
- package/src/commands/init/init.ts +48 -35
- package/src/commands/init/migrate-config.ts +146 -0
- package/src/commands/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
- package/src/commands/release-create/__tests__/release-create.test.ts +55 -0
- package/src/commands/release-create/release-create.ts +142 -38
- package/src/commands/release-desc-edit/release-desc-edit.ts +28 -8
- package/src/commands/version/version.ts +1 -1
- package/src/commands/worktrees-add/worktrees-add.ts +7 -12
- package/src/commands/worktrees-list/worktrees-list.ts +13 -5
- package/src/commands/worktrees-open/worktrees-open.ts +1 -1
- package/src/commands/worktrees-remove/worktrees-remove.ts +6 -10
- package/src/commands/worktrees-sync/worktrees-sync.ts +3 -5
- package/src/entry/cli.ts +49 -6
- package/src/entry/index.ts +5 -0
- package/src/integrations/cmux/open-workspace-with-layout.ts +4 -4
- package/src/integrations/cmux/workspace-title.ts +10 -4
- package/src/integrations/doppler/doppler-project.ts +1 -1
- package/src/integrations/gh/gh-release-prs/__tests__/gh-release-prs.test.ts +115 -0
- package/src/integrations/gh/gh-release-prs/gh-release-prs.ts +49 -32
- package/src/lib/.omc/state/sessions/a60ac2ec-afbd-449f-a540-6df287392fc2/pre-tool-advisory-throttle.json +14 -0
- package/src/lib/constants/index.ts +15 -0
- package/src/lib/git-utils/__tests__/git-utils.test.ts +49 -0
- package/src/lib/git-utils/git-utils.ts +3 -1
- package/src/lib/infra-kit-config/__tests__/infra-kit-config.test.ts +270 -0
- package/src/lib/infra-kit-config/index.ts +7 -1
- package/src/lib/infra-kit-config/infra-kit-config.ts +46 -28
- package/src/lib/package-config/__tests__/package-config.test.ts +95 -0
- package/src/lib/package-config/index.ts +3 -0
- package/src/lib/package-config/package-config-schema.ts +19 -0
- package/src/lib/package-config/package-config.ts +99 -0
- package/src/lib/package-validator/__tests__/package-validator.test.ts +263 -0
- package/src/lib/package-validator/checks/__tests__/checks.test.ts +130 -0
- package/src/lib/package-validator/checks/config-check.ts +30 -0
- package/src/lib/package-validator/checks/files-check.ts +29 -0
- package/src/lib/package-validator/checks/index.ts +4 -0
- package/src/lib/package-validator/checks/scripts-check.ts +23 -0
- package/src/lib/package-validator/checks/turbo-check.ts +47 -0
- package/src/lib/package-validator/fs-utils.ts +18 -0
- package/src/lib/package-validator/index.ts +3 -0
- package/src/lib/package-validator/loader/config-loader.ts +77 -0
- package/src/lib/package-validator/loader/index.ts +2 -0
- package/src/lib/package-validator/loader/package-discovery.ts +98 -0
- package/src/lib/package-validator/package-validator.ts +48 -0
- package/src/lib/package-validator/types.ts +15 -0
- package/src/lib/release-id/__tests__/release-id.test.ts +351 -0
- package/src/lib/release-id/__tests__/versioned-regression.test.ts +69 -0
- package/src/lib/release-id/index.ts +15 -0
- package/src/lib/release-id/release-id.ts +257 -0
- package/src/lib/release-utils/__tests__/release-utils.test.ts +122 -0
- package/src/lib/release-utils/index.ts +4 -0
- package/src/lib/release-utils/release-utils.ts +85 -17
- package/src/lib/version-utils/__tests__/load-existing-versions.test.ts +37 -0
- package/src/lib/version-utils/__tests__/next-version.test.ts +119 -13
- package/src/lib/version-utils/index.ts +3 -0
- package/src/lib/version-utils/load-existing-versions.ts +29 -10
- package/src/lib/version-utils/next-version.ts +67 -12
- package/src/lib/version-utils/version-utils.ts +13 -4
- package/src/mcp/tools/index.ts +2 -0
- package/src/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
- package/src/types.ts +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/src/lib/__tests__/infra-kit-config.test.ts +0 -231
- /package/src/integrations/{clickup → linear}/.gitkeep +0 -0
- /package/src/lib/{__tests__ → constants/__tests__}/constants.test.ts +0 -0
- /package/src/lib/{constants.ts → constants/constants.ts} +0 -0
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs'
|
|
2
|
-
import os from 'node:os'
|
|
3
|
-
import path from 'node:path'
|
|
4
|
-
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
|
5
|
-
|
|
6
|
-
// Import AFTER the mock is declared so the module picks up the mocked dep.
|
|
7
|
-
import { getProjectRoot, getRepoName } from 'src/lib/git-utils'
|
|
8
|
-
|
|
9
|
-
import { getInfraKitConfig, resetInfraKitConfigCache } from '../infra-kit-config'
|
|
10
|
-
|
|
11
|
-
vi.mock('src/lib/git-utils', () => {
|
|
12
|
-
return {
|
|
13
|
-
getProjectRoot: vi.fn(),
|
|
14
|
-
getRepoName: vi.fn(),
|
|
15
|
-
}
|
|
16
|
-
})
|
|
17
|
-
|
|
18
|
-
const VALID_YML = `environments:
|
|
19
|
-
- dev
|
|
20
|
-
- staging
|
|
21
|
-
envManagement:
|
|
22
|
-
provider: doppler
|
|
23
|
-
config:
|
|
24
|
-
name: my-project
|
|
25
|
-
`
|
|
26
|
-
|
|
27
|
-
const ALTERNATE_YML = `environments:
|
|
28
|
-
- dev
|
|
29
|
-
envManagement:
|
|
30
|
-
provider: doppler
|
|
31
|
-
config:
|
|
32
|
-
name: other-project
|
|
33
|
-
`
|
|
34
|
-
|
|
35
|
-
const withTmpRepo = async (fn: (tmp: string) => Promise<void>): Promise<void> => {
|
|
36
|
-
const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'infra-kit-config-test-'))
|
|
37
|
-
|
|
38
|
-
vi.mocked(getProjectRoot).mockResolvedValue(tmp)
|
|
39
|
-
vi.mocked(getRepoName).mockResolvedValue(path.basename(tmp))
|
|
40
|
-
// Point os.homedir() at the tmp dir so user-scope override layers
|
|
41
|
-
// (~/.infra-kit/config.yml, ~/.infra-kit/projects/<repo>/infra-kit.yml)
|
|
42
|
-
// can't leak the developer's real config into the test.
|
|
43
|
-
const homedirSpy = vi.spyOn(os, 'homedir').mockReturnValue(tmp)
|
|
44
|
-
|
|
45
|
-
resetInfraKitConfigCache()
|
|
46
|
-
|
|
47
|
-
try {
|
|
48
|
-
await fn(tmp)
|
|
49
|
-
} finally {
|
|
50
|
-
homedirSpy.mockRestore()
|
|
51
|
-
resetInfraKitConfigCache()
|
|
52
|
-
fs.rmSync(tmp, { recursive: true, force: true })
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
describe('getInfraKitConfig', () => {
|
|
57
|
-
beforeEach(() => {
|
|
58
|
-
resetInfraKitConfigCache()
|
|
59
|
-
})
|
|
60
|
-
|
|
61
|
-
afterEach(() => {
|
|
62
|
-
resetInfraKitConfigCache()
|
|
63
|
-
vi.clearAllMocks()
|
|
64
|
-
})
|
|
65
|
-
|
|
66
|
-
it('reads and validates a well-formed infra-kit.yml', async () => {
|
|
67
|
-
await withTmpRepo(async (tmp) => {
|
|
68
|
-
fs.writeFileSync(path.join(tmp, 'infra-kit.yml'), VALID_YML)
|
|
69
|
-
|
|
70
|
-
const cfg = await getInfraKitConfig()
|
|
71
|
-
|
|
72
|
-
expect(cfg.envManagement.config.name).toBe('my-project')
|
|
73
|
-
expect(cfg.environments).toEqual(['dev', 'staging'])
|
|
74
|
-
expect(cfg.taskManager).toBeUndefined()
|
|
75
|
-
expect(cfg.ide).toBeUndefined()
|
|
76
|
-
})
|
|
77
|
-
})
|
|
78
|
-
|
|
79
|
-
it('accepts ide and taskManager when provided', async () => {
|
|
80
|
-
await withTmpRepo(async (tmp) => {
|
|
81
|
-
fs.writeFileSync(
|
|
82
|
-
path.join(tmp, 'infra-kit.yml'),
|
|
83
|
-
`environments: [dev]
|
|
84
|
-
envManagement:
|
|
85
|
-
provider: doppler
|
|
86
|
-
config:
|
|
87
|
-
name: p
|
|
88
|
-
ide:
|
|
89
|
-
provider: cursor
|
|
90
|
-
config:
|
|
91
|
-
mode: workspace
|
|
92
|
-
workspaceConfigPath: ./ws.code-workspace
|
|
93
|
-
taskManager:
|
|
94
|
-
provider: jira
|
|
95
|
-
config:
|
|
96
|
-
baseUrl: https://example.atlassian.net
|
|
97
|
-
projectId: 123
|
|
98
|
-
`,
|
|
99
|
-
)
|
|
100
|
-
|
|
101
|
-
const cfg = await getInfraKitConfig()
|
|
102
|
-
|
|
103
|
-
expect(cfg.ide?.provider).toBe('cursor')
|
|
104
|
-
|
|
105
|
-
if (cfg.ide?.provider === 'cursor') {
|
|
106
|
-
expect(cfg.ide.config.mode).toBe('workspace')
|
|
107
|
-
expect(cfg.ide.config.workspaceConfigPath).toBe('./ws.code-workspace')
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
expect(cfg.taskManager?.provider).toBe('jira')
|
|
111
|
-
})
|
|
112
|
-
})
|
|
113
|
-
|
|
114
|
-
it('accepts a worktrees prompt-defaults block', async () => {
|
|
115
|
-
await withTmpRepo(async (tmp) => {
|
|
116
|
-
fs.writeFileSync(
|
|
117
|
-
path.join(tmp, 'infra-kit.yml'),
|
|
118
|
-
`environments: [dev]
|
|
119
|
-
envManagement:
|
|
120
|
-
provider: doppler
|
|
121
|
-
config:
|
|
122
|
-
name: p
|
|
123
|
-
worktrees:
|
|
124
|
-
openInGithubDesktop: false
|
|
125
|
-
openInCmux: true
|
|
126
|
-
`,
|
|
127
|
-
)
|
|
128
|
-
|
|
129
|
-
const cfg = await getInfraKitConfig()
|
|
130
|
-
|
|
131
|
-
expect(cfg.worktrees?.openInGithubDesktop).toBe(false)
|
|
132
|
-
expect(cfg.worktrees?.openInCmux).toBe(true)
|
|
133
|
-
})
|
|
134
|
-
})
|
|
135
|
-
|
|
136
|
-
it('lets the user-global config layer supply a worktrees block when the project omits it', async () => {
|
|
137
|
-
await withTmpRepo(async (tmp) => {
|
|
138
|
-
fs.writeFileSync(path.join(tmp, 'infra-kit.yml'), VALID_YML)
|
|
139
|
-
|
|
140
|
-
const userGlobalDir = path.join(tmp, '.infra-kit')
|
|
141
|
-
|
|
142
|
-
fs.mkdirSync(userGlobalDir, { recursive: true })
|
|
143
|
-
fs.writeFileSync(
|
|
144
|
-
path.join(userGlobalDir, 'config.yml'),
|
|
145
|
-
`worktrees:
|
|
146
|
-
openInGithubDesktop: false
|
|
147
|
-
openInCmux: true
|
|
148
|
-
`,
|
|
149
|
-
)
|
|
150
|
-
|
|
151
|
-
const cfg = await getInfraKitConfig()
|
|
152
|
-
|
|
153
|
-
expect(cfg.worktrees?.openInGithubDesktop).toBe(false)
|
|
154
|
-
expect(cfg.worktrees?.openInCmux).toBe(true)
|
|
155
|
-
})
|
|
156
|
-
})
|
|
157
|
-
|
|
158
|
-
it('rejects ide.cursor mode=workspace without workspaceConfigPath', async () => {
|
|
159
|
-
await withTmpRepo(async (tmp) => {
|
|
160
|
-
fs.writeFileSync(
|
|
161
|
-
path.join(tmp, 'infra-kit.yml'),
|
|
162
|
-
`environments: [dev]
|
|
163
|
-
envManagement:
|
|
164
|
-
provider: doppler
|
|
165
|
-
config:
|
|
166
|
-
name: p
|
|
167
|
-
ide:
|
|
168
|
-
provider: cursor
|
|
169
|
-
config:
|
|
170
|
-
mode: workspace
|
|
171
|
-
`,
|
|
172
|
-
)
|
|
173
|
-
|
|
174
|
-
await expect(getInfraKitConfig()).rejects.toThrow(/workspaceConfigPath/)
|
|
175
|
-
})
|
|
176
|
-
})
|
|
177
|
-
|
|
178
|
-
it('throws when infra-kit.yml is missing', async () => {
|
|
179
|
-
await withTmpRepo(async () => {
|
|
180
|
-
await expect(getInfraKitConfig()).rejects.toThrow(/not found/)
|
|
181
|
-
})
|
|
182
|
-
})
|
|
183
|
-
|
|
184
|
-
it('throws a descriptive error on schema violations', async () => {
|
|
185
|
-
await withTmpRepo(async (tmp) => {
|
|
186
|
-
fs.writeFileSync(
|
|
187
|
-
path.join(tmp, 'infra-kit.yml'),
|
|
188
|
-
'environments: []\nenvManagement:\n provider: doppler\n config:\n name: ""\n',
|
|
189
|
-
)
|
|
190
|
-
|
|
191
|
-
await expect(getInfraKitConfig()).rejects.toThrow(/Invalid infra-kit.yml/)
|
|
192
|
-
})
|
|
193
|
-
})
|
|
194
|
-
|
|
195
|
-
it('re-reads the file when mtime changes (long-running MCP scenario)', async () => {
|
|
196
|
-
await withTmpRepo(async (tmp) => {
|
|
197
|
-
const ymlPath = path.join(tmp, 'infra-kit.yml')
|
|
198
|
-
|
|
199
|
-
fs.writeFileSync(ymlPath, VALID_YML)
|
|
200
|
-
|
|
201
|
-
const first = await getInfraKitConfig()
|
|
202
|
-
|
|
203
|
-
expect(first.envManagement.config.name).toBe('my-project')
|
|
204
|
-
|
|
205
|
-
// Advance mtime past the previous stat to simulate an edit; write new content.
|
|
206
|
-
const future = new Date(Date.now() + 2_000)
|
|
207
|
-
|
|
208
|
-
fs.writeFileSync(ymlPath, ALTERNATE_YML)
|
|
209
|
-
fs.utimesSync(ymlPath, future, future)
|
|
210
|
-
|
|
211
|
-
const second = await getInfraKitConfig()
|
|
212
|
-
|
|
213
|
-
expect(second.envManagement.config.name).toBe('other-project')
|
|
214
|
-
expect(second.environments).toEqual(['dev'])
|
|
215
|
-
})
|
|
216
|
-
})
|
|
217
|
-
|
|
218
|
-
it('returns the cached value on repeated calls when mtime is unchanged', async () => {
|
|
219
|
-
await withTmpRepo(async (tmp) => {
|
|
220
|
-
const ymlPath = path.join(tmp, 'infra-kit.yml')
|
|
221
|
-
|
|
222
|
-
fs.writeFileSync(ymlPath, VALID_YML)
|
|
223
|
-
|
|
224
|
-
const a = await getInfraKitConfig()
|
|
225
|
-
const b = await getInfraKitConfig()
|
|
226
|
-
|
|
227
|
-
// Same object reference — no re-parse.
|
|
228
|
-
expect(a).toBe(b)
|
|
229
|
-
})
|
|
230
|
-
})
|
|
231
|
-
})
|
|
File without changes
|
|
File without changes
|
|
File without changes
|