* feat(api): classify openai-compatible provider failures * Update src/services/api/providerConfig.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/services/api/errors.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * feat(api): harden openai-compatible diagnostics and env fallback * Update src/services/api/openaiShim.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/services/api/openaiShim.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/services/api/errors.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/services/api/errors.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix openaiShim duplicate requests and diagnostics * remove unused url from http failure classifier * dedupe env diagnostic warnings * Remove hardcoded URLs from OpenAI error tests Removed hardcoded URLs from network failure classification tests. * Update providerConfig.envDiagnostics.test.ts * fix(openai-shim): return successful responses and restore localhost classifier tests * Update src/services/api/openaiShim.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/services/api/openaiShim.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/services/api/openaiShim.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * feat(provider): add truthful local generation readiness checks Implement Phase 2 provider readiness behavior by adding structured Ollama generation probes, wiring setup flows to readiness states, extending system-check with generation readiness output, and updating focused tests. * feat(api): add local self-healing fallback retries Implement Phase 3 self-healing behavior for local OpenAI-compatible providers: retry base URL fallbacks for localhost resolution and endpoint mismatches, plus capability-gated toolless retry for tool-incompatible local models; include diagnostics and focused tests. * fix(api): address review blockers for local provider reliability * Update src/utils/providerDiscovery.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/services/api/openaiShim.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix: harden readiness probes and cross-platform test stability * fix: refresh toolless retry payload and stabilize osc clipboard test * fix: harden Ollama readiness parsing and redact provider URLs --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
55 lines
1.7 KiB
TypeScript
55 lines
1.7 KiB
TypeScript
import { afterEach, expect, test } from 'bun:test'
|
|
import { mkdtemp, readFile, rm } from 'fs/promises'
|
|
import { tmpdir } from 'os'
|
|
import { join } from 'path'
|
|
import { initializeWiki } from './init.js'
|
|
import { getWikiPaths } from './paths.js'
|
|
|
|
const tempDirs: string[] = []
|
|
|
|
afterEach(async () => {
|
|
await Promise.all(
|
|
tempDirs.splice(0).map(dir => rm(dir, { recursive: true, force: true })),
|
|
)
|
|
})
|
|
|
|
async function makeProjectDir(): Promise<string> {
|
|
const dir = await mkdtemp(join(tmpdir(), 'openclaude-wiki-init-'))
|
|
tempDirs.push(dir)
|
|
return dir
|
|
}
|
|
|
|
test('initializeWiki creates the expected wiki scaffold', async () => {
|
|
const cwd = await makeProjectDir()
|
|
const result = await initializeWiki(cwd)
|
|
const paths = getWikiPaths(cwd)
|
|
|
|
expect(result.alreadyExisted).toBe(false)
|
|
expect(result.createdFiles).toEqual([
|
|
join('.openclaude', 'wiki', 'schema.md'),
|
|
join('.openclaude', 'wiki', 'index.md'),
|
|
join('.openclaude', 'wiki', 'log.md'),
|
|
join('.openclaude', 'wiki', 'pages', 'architecture.md'),
|
|
])
|
|
expect(await readFile(paths.schemaFile, 'utf8')).toContain(
|
|
'# OpenClaude Wiki Schema',
|
|
)
|
|
expect(await readFile(paths.indexFile, 'utf8')).toContain('Wiki')
|
|
expect(await readFile(paths.logFile, 'utf8')).toContain(
|
|
'Wiki initialized by OpenClaude',
|
|
)
|
|
expect(await readFile(join(paths.pagesDir, 'architecture.md'), 'utf8')).toContain(
|
|
'# Architecture',
|
|
)
|
|
})
|
|
|
|
test('initializeWiki is idempotent and preserves existing files', async () => {
|
|
const cwd = await makeProjectDir()
|
|
|
|
await initializeWiki(cwd)
|
|
const second = await initializeWiki(cwd)
|
|
|
|
expect(second.alreadyExisted).toBe(true)
|
|
expect(second.createdFiles).toEqual([])
|
|
})
|