@codeguide/core 0.0.28 → 0.0.29
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/__tests__/services/usage/usage-service.test.ts +442 -83
- package/codeguide.ts +3 -0
- package/dist/codeguide.d.ts +2 -1
- package/dist/codeguide.js +1 -0
- package/dist/index.d.ts +4 -3
- package/dist/services/base/base-service.d.ts +21 -0
- package/dist/services/base/base-service.js +114 -0
- package/dist/services/codespace/codespace-service.d.ts +55 -1
- package/dist/services/codespace/codespace-service.js +257 -0
- package/dist/services/codespace/codespace-types.d.ts +192 -12
- package/dist/services/codespace/index.d.ts +1 -1
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.js +4 -1
- package/dist/services/projects/project-types.d.ts +66 -32
- package/dist/services/starter-kits/index.d.ts +2 -0
- package/dist/services/starter-kits/index.js +20 -0
- package/dist/services/starter-kits/starter-kits-service.d.ts +13 -0
- package/dist/services/starter-kits/starter-kits-service.js +27 -0
- package/dist/services/starter-kits/starter-kits-types.d.ts +34 -0
- package/dist/services/starter-kits/starter-kits-types.js +2 -0
- package/dist/services/tasks/task-service.d.ts +2 -1
- package/dist/services/tasks/task-service.js +8 -0
- package/dist/services/tasks/task-types.d.ts +26 -7
- package/dist/services/usage/usage-service.d.ts +5 -2
- package/dist/services/usage/usage-service.js +58 -9
- package/dist/services/usage/usage-types.d.ts +150 -26
- package/docs/.vitepress/README.md +51 -0
- package/docs/.vitepress/config.ts +139 -0
- package/docs/.vitepress/theme/custom.css +80 -0
- package/docs/.vitepress/theme/index.ts +13 -0
- package/docs/.vitepress/tsconfig.json +19 -0
- package/docs/QUICKSTART.md +77 -0
- package/docs/README.md +134 -0
- package/docs/README_SETUP.md +46 -0
- package/docs/authentication.md +351 -0
- package/docs/codeguide-client.md +350 -0
- package/docs/codespace-models.md +1004 -0
- package/docs/codespace-service.md +444 -0
- package/docs/index.md +135 -0
- package/docs/package.json +14 -0
- package/docs/projects-service.md +688 -0
- package/docs/security-keys-service.md +773 -0
- package/docs/starter-kits-service.md +249 -0
- package/docs/task-service.md +955 -0
- package/docs/testsprite_tests/TC001_Homepage_Load_and_Hero_Section_Display.py +70 -0
- package/docs/testsprite_tests/TC002_Sidebar_Navigation_ExpandCollapse_Functionality.py +73 -0
- package/docs/testsprite_tests/TC003_Full_Text_Local_Search_with_Keyboard_Shortcut.py +90 -0
- package/docs/testsprite_tests/TC004_Dark_Mode_Toggle_and_Persistence.py +73 -0
- package/docs/testsprite_tests/TC005_Mobile_Responsiveness_and_Touch_Navigation.py +113 -0
- package/docs/testsprite_tests/TC006_GitHub_Integration_Edit_this_page_Links.py +73 -0
- package/docs/testsprite_tests/TC007_Syntax_Highlighting_and_Code_Copy_Functionality.py +73 -0
- package/docs/testsprite_tests/TC008_Auto_Generated_Table_of_Contents_Accuracy.py +73 -0
- package/docs/testsprite_tests/TC009_SEO_and_Content_Discoverability_Verification.py +73 -0
- package/docs/testsprite_tests/TC010_Accessibility_Compliance_WCAG_AA.py +73 -0
- package/docs/testsprite_tests/TC011_Local_Development_Workflow_Build_and_Hot_Reload.py +74 -0
- package/docs/testsprite_tests/TC012_Performance_Metrics_Compliance.py +73 -0
- package/docs/testsprite_tests/standard_prd.json +122 -0
- package/docs/testsprite_tests/testsprite-mcp-test-report.html +2508 -0
- package/docs/testsprite_tests/testsprite-mcp-test-report.md +273 -0
- package/docs/testsprite_tests/testsprite_frontend_test_plan.json +390 -0
- package/docs/usage-service.md +291 -1
- package/index.ts +11 -3
- package/package.json +16 -2
- package/plans/CODESPACE_LOGS_STREAMING_GUIDE.md +320 -0
- package/plans/CODESPACE_TASK_LOGS_API_COMPLETE_GUIDE.md +821 -0
- package/services/base/base-service.ts +130 -0
- package/services/codespace/codespace-service.ts +337 -0
- package/services/codespace/codespace-types.ts +262 -13
- package/services/codespace/index.ts +16 -1
- package/services/index.ts +2 -0
- package/services/projects/README.md +107 -34
- package/services/projects/project-types.ts +69 -32
- package/services/starter-kits/index.ts +2 -0
- package/services/starter-kits/starter-kits-service.ts +33 -0
- package/services/starter-kits/starter-kits-types.ts +38 -0
- package/services/tasks/task-service.ts +10 -0
- package/services/tasks/task-types.ts +29 -7
- package/services/usage/usage-service.ts +59 -10
- package/services/usage/usage-types.ts +178 -27
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
from playwright import async_api
|
|
3
|
+
from playwright.async_api import expect
|
|
4
|
+
|
|
5
|
+
async def run_test():
|
|
6
|
+
pw = None
|
|
7
|
+
browser = None
|
|
8
|
+
context = None
|
|
9
|
+
|
|
10
|
+
try:
|
|
11
|
+
# Start a Playwright session in asynchronous mode
|
|
12
|
+
pw = await async_api.async_playwright().start()
|
|
13
|
+
|
|
14
|
+
# Launch a Chromium browser in headless mode with custom arguments
|
|
15
|
+
browser = await pw.chromium.launch(
|
|
16
|
+
headless=True,
|
|
17
|
+
args=[
|
|
18
|
+
"--window-size=1280,720", # Set the browser window size
|
|
19
|
+
"--disable-dev-shm-usage", # Avoid using /dev/shm which can cause issues in containers
|
|
20
|
+
"--ipc=host", # Use host-level IPC for better stability
|
|
21
|
+
"--single-process" # Run the browser in a single process mode
|
|
22
|
+
],
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
# Create a new browser context (like an incognito window)
|
|
26
|
+
context = await browser.new_context()
|
|
27
|
+
context.set_default_timeout(5000)
|
|
28
|
+
|
|
29
|
+
# Open a new page in the browser context
|
|
30
|
+
page = await context.new_page()
|
|
31
|
+
|
|
32
|
+
# Navigate to your target URL and wait until the network request is committed
|
|
33
|
+
await page.goto("http://localhost:5174", wait_until="commit", timeout=10000)
|
|
34
|
+
|
|
35
|
+
# Wait for the main page to reach DOMContentLoaded state (optional for stability)
|
|
36
|
+
try:
|
|
37
|
+
await page.wait_for_load_state("domcontentloaded", timeout=3000)
|
|
38
|
+
except async_api.Error:
|
|
39
|
+
pass
|
|
40
|
+
|
|
41
|
+
# Iterate through all iframes and wait for them to load as well
|
|
42
|
+
for frame in page.frames:
|
|
43
|
+
try:
|
|
44
|
+
await frame.wait_for_load_state("domcontentloaded", timeout=3000)
|
|
45
|
+
except async_api.Error:
|
|
46
|
+
pass
|
|
47
|
+
|
|
48
|
+
# Interact with the page elements to simulate user flow
|
|
49
|
+
# -> Inspect additional documentation pages to verify consistent presence of meta tags, descriptions, structured data, and semantic URLs.
|
|
50
|
+
frame = context.pages[-1]
|
|
51
|
+
# Click on 'Getting Started' link to inspect its SEO elements
|
|
52
|
+
elem = frame.locator('xpath=html/body/div/div/div/div/div[3]/div/div/h2[4]/a').nth(0)
|
|
53
|
+
await page.wait_for_timeout(3000); await elem.click(timeout=5000)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
# --> Assertions to verify final state
|
|
57
|
+
frame = context.pages[-1]
|
|
58
|
+
try:
|
|
59
|
+
await expect(frame.locator('text=SEO Optimization Complete').first).to_be_visible(timeout=1000)
|
|
60
|
+
except AssertionError:
|
|
61
|
+
raise AssertionError('Test case failed: The test plan execution has failed because the page does not include proper meta tags, titles, descriptions, and structured content to meet SEO standards.')
|
|
62
|
+
await asyncio.sleep(5)
|
|
63
|
+
|
|
64
|
+
finally:
|
|
65
|
+
if context:
|
|
66
|
+
await context.close()
|
|
67
|
+
if browser:
|
|
68
|
+
await browser.close()
|
|
69
|
+
if pw:
|
|
70
|
+
await pw.stop()
|
|
71
|
+
|
|
72
|
+
asyncio.run(run_test())
|
|
73
|
+
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
from playwright import async_api
|
|
3
|
+
from playwright.async_api import expect
|
|
4
|
+
|
|
5
|
+
async def run_test():
|
|
6
|
+
pw = None
|
|
7
|
+
browser = None
|
|
8
|
+
context = None
|
|
9
|
+
|
|
10
|
+
try:
|
|
11
|
+
# Start a Playwright session in asynchronous mode
|
|
12
|
+
pw = await async_api.async_playwright().start()
|
|
13
|
+
|
|
14
|
+
# Launch a Chromium browser in headless mode with custom arguments
|
|
15
|
+
browser = await pw.chromium.launch(
|
|
16
|
+
headless=True,
|
|
17
|
+
args=[
|
|
18
|
+
"--window-size=1280,720", # Set the browser window size
|
|
19
|
+
"--disable-dev-shm-usage", # Avoid using /dev/shm which can cause issues in containers
|
|
20
|
+
"--ipc=host", # Use host-level IPC for better stability
|
|
21
|
+
"--single-process" # Run the browser in a single process mode
|
|
22
|
+
],
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
# Create a new browser context (like an incognito window)
|
|
26
|
+
context = await browser.new_context()
|
|
27
|
+
context.set_default_timeout(5000)
|
|
28
|
+
|
|
29
|
+
# Open a new page in the browser context
|
|
30
|
+
page = await context.new_page()
|
|
31
|
+
|
|
32
|
+
# Navigate to your target URL and wait until the network request is committed
|
|
33
|
+
await page.goto("http://localhost:5174", wait_until="commit", timeout=10000)
|
|
34
|
+
|
|
35
|
+
# Wait for the main page to reach DOMContentLoaded state (optional for stability)
|
|
36
|
+
try:
|
|
37
|
+
await page.wait_for_load_state("domcontentloaded", timeout=3000)
|
|
38
|
+
except async_api.Error:
|
|
39
|
+
pass
|
|
40
|
+
|
|
41
|
+
# Iterate through all iframes and wait for them to load as well
|
|
42
|
+
for frame in page.frames:
|
|
43
|
+
try:
|
|
44
|
+
await frame.wait_for_load_state("domcontentloaded", timeout=3000)
|
|
45
|
+
except async_api.Error:
|
|
46
|
+
pass
|
|
47
|
+
|
|
48
|
+
# Interact with the page elements to simulate user flow
|
|
49
|
+
# -> Navigate through the site using keyboard only (Tab, Shift+Tab, Enter, arrow keys) to verify focus order and reachability of interactive elements.
|
|
50
|
+
frame = context.pages[-1]
|
|
51
|
+
# Focus on 'Skip to content' link to start keyboard navigation testing
|
|
52
|
+
elem = frame.locator('xpath=html/body/div/div/header/div/div/div/div/div/a').nth(0)
|
|
53
|
+
await page.wait_for_timeout(3000); await elem.click(timeout=5000)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
# --> Assertions to verify final state
|
|
57
|
+
frame = context.pages[-1]
|
|
58
|
+
try:
|
|
59
|
+
await expect(frame.locator('text=Accessibility Compliance Verified').first).to_be_visible(timeout=1000)
|
|
60
|
+
except AssertionError:
|
|
61
|
+
raise AssertionError('Test case failed: The documentation site did not meet accessibility standards for keyboard navigation, color contrast, and screen reader compatibility as per WCAG AA requirements.')
|
|
62
|
+
await asyncio.sleep(5)
|
|
63
|
+
|
|
64
|
+
finally:
|
|
65
|
+
if context:
|
|
66
|
+
await context.close()
|
|
67
|
+
if browser:
|
|
68
|
+
await browser.close()
|
|
69
|
+
if pw:
|
|
70
|
+
await pw.stop()
|
|
71
|
+
|
|
72
|
+
asyncio.run(run_test())
|
|
73
|
+
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
from playwright import async_api
|
|
3
|
+
from playwright.async_api import expect
|
|
4
|
+
|
|
5
|
+
async def run_test():
|
|
6
|
+
pw = None
|
|
7
|
+
browser = None
|
|
8
|
+
context = None
|
|
9
|
+
|
|
10
|
+
try:
|
|
11
|
+
# Start a Playwright session in asynchronous mode
|
|
12
|
+
pw = await async_api.async_playwright().start()
|
|
13
|
+
|
|
14
|
+
# Launch a Chromium browser in headless mode with custom arguments
|
|
15
|
+
browser = await pw.chromium.launch(
|
|
16
|
+
headless=True,
|
|
17
|
+
args=[
|
|
18
|
+
"--window-size=1280,720", # Set the browser window size
|
|
19
|
+
"--disable-dev-shm-usage", # Avoid using /dev/shm which can cause issues in containers
|
|
20
|
+
"--ipc=host", # Use host-level IPC for better stability
|
|
21
|
+
"--single-process" # Run the browser in a single process mode
|
|
22
|
+
],
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
# Create a new browser context (like an incognito window)
|
|
26
|
+
context = await browser.new_context()
|
|
27
|
+
context.set_default_timeout(5000)
|
|
28
|
+
|
|
29
|
+
# Open a new page in the browser context
|
|
30
|
+
page = await context.new_page()
|
|
31
|
+
|
|
32
|
+
# Navigate to your target URL and wait until the network request is committed
|
|
33
|
+
await page.goto("http://localhost:5174", wait_until="commit", timeout=10000)
|
|
34
|
+
|
|
35
|
+
# Wait for the main page to reach DOMContentLoaded state (optional for stability)
|
|
36
|
+
try:
|
|
37
|
+
await page.wait_for_load_state("domcontentloaded", timeout=3000)
|
|
38
|
+
except async_api.Error:
|
|
39
|
+
pass
|
|
40
|
+
|
|
41
|
+
# Iterate through all iframes and wait for them to load as well
|
|
42
|
+
for frame in page.frames:
|
|
43
|
+
try:
|
|
44
|
+
await frame.wait_for_load_state("domcontentloaded", timeout=3000)
|
|
45
|
+
except async_api.Error:
|
|
46
|
+
pass
|
|
47
|
+
|
|
48
|
+
# Interact with the page elements to simulate user flow
|
|
49
|
+
# --> Assertions to verify final state
|
|
50
|
+
frame = context.pages[-1]
|
|
51
|
+
await expect(frame.locator('text=Complete TypeScript SDK for integrating CodeGuide functionality into your applications.').first).to_be_visible(timeout=30000)
|
|
52
|
+
await expect(frame.locator('text=Database API keys, legacy keys, and JWT tokens with automatic fallback').first).to_be_visible(timeout=30000)
|
|
53
|
+
await expect(frame.locator('text=Create, update, and manage projects programmatically with full CRUD operations').first).to_be_visible(timeout=30000)
|
|
54
|
+
await expect(frame.locator('text=Create and manage AI-powered coding tasks with support for multiple execution modes').first).to_be_visible(timeout=30000)
|
|
55
|
+
await expect(frame.locator('text=Query and manage LLM models and providers for your codespace tasks').first).to_be_visible(timeout=30000)
|
|
56
|
+
await expect(frame.locator('text=Securely manage provider API keys and GitHub tokens with encryption').first).to_be_visible(timeout=30000)
|
|
57
|
+
await expect(frame.locator('text=Full type safety and IntelliSense support for all API methods').first).to_be_visible(timeout=30000)
|
|
58
|
+
await expect(frame.locator('text=npm install @codeguide/core').first).to_be_visible(timeout=30000)
|
|
59
|
+
await expect(frame.locator('text=const project = await codeguide.projects.createProject({ title: 'My New Project', description: 'Project description here' });').first).to_be_visible(timeout=30000)
|
|
60
|
+
await expect(frame.locator('text=const task = await codeguide.codespace.createCodespaceTaskV2({ project_id: project.id, task_description: 'Implement user authentication', execution_mode: 'implementation' });').first).to_be_visible(timeout=30000)
|
|
61
|
+
await expect(frame.locator('text=await codeguide.securityKeys.createProviderAPIKey({ provider_key: 'openai', api_key: 'sk-your-openai-key' });').first).to_be_visible(timeout=30000)
|
|
62
|
+
await expect(frame.locator('text=await codeguide.securityKeys.createGitHubToken({ github_token: 'ghp_your_github_token' });').first).to_be_visible(timeout=30000)
|
|
63
|
+
await asyncio.sleep(5)
|
|
64
|
+
|
|
65
|
+
finally:
|
|
66
|
+
if context:
|
|
67
|
+
await context.close()
|
|
68
|
+
if browser:
|
|
69
|
+
await browser.close()
|
|
70
|
+
if pw:
|
|
71
|
+
await pw.stop()
|
|
72
|
+
|
|
73
|
+
asyncio.run(run_test())
|
|
74
|
+
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
from playwright import async_api
|
|
3
|
+
from playwright.async_api import expect
|
|
4
|
+
|
|
5
|
+
async def run_test():
|
|
6
|
+
pw = None
|
|
7
|
+
browser = None
|
|
8
|
+
context = None
|
|
9
|
+
|
|
10
|
+
try:
|
|
11
|
+
# Start a Playwright session in asynchronous mode
|
|
12
|
+
pw = await async_api.async_playwright().start()
|
|
13
|
+
|
|
14
|
+
# Launch a Chromium browser in headless mode with custom arguments
|
|
15
|
+
browser = await pw.chromium.launch(
|
|
16
|
+
headless=True,
|
|
17
|
+
args=[
|
|
18
|
+
"--window-size=1280,720", # Set the browser window size
|
|
19
|
+
"--disable-dev-shm-usage", # Avoid using /dev/shm which can cause issues in containers
|
|
20
|
+
"--ipc=host", # Use host-level IPC for better stability
|
|
21
|
+
"--single-process" # Run the browser in a single process mode
|
|
22
|
+
],
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
# Create a new browser context (like an incognito window)
|
|
26
|
+
context = await browser.new_context()
|
|
27
|
+
context.set_default_timeout(5000)
|
|
28
|
+
|
|
29
|
+
# Open a new page in the browser context
|
|
30
|
+
page = await context.new_page()
|
|
31
|
+
|
|
32
|
+
# Navigate to your target URL and wait until the network request is committed
|
|
33
|
+
await page.goto("http://localhost:5174", wait_until="commit", timeout=10000)
|
|
34
|
+
|
|
35
|
+
# Wait for the main page to reach DOMContentLoaded state (optional for stability)
|
|
36
|
+
try:
|
|
37
|
+
await page.wait_for_load_state("domcontentloaded", timeout=3000)
|
|
38
|
+
except async_api.Error:
|
|
39
|
+
pass
|
|
40
|
+
|
|
41
|
+
# Iterate through all iframes and wait for them to load as well
|
|
42
|
+
for frame in page.frames:
|
|
43
|
+
try:
|
|
44
|
+
await frame.wait_for_load_state("domcontentloaded", timeout=3000)
|
|
45
|
+
except async_api.Error:
|
|
46
|
+
pass
|
|
47
|
+
|
|
48
|
+
# Interact with the page elements to simulate user flow
|
|
49
|
+
# -> Select the 'Getting Started' documentation page to measure FCP and CLS.
|
|
50
|
+
frame = context.pages[-1]
|
|
51
|
+
# Click on 'Getting Started' documentation page link
|
|
52
|
+
elem = frame.locator('xpath=html/body/div/div/header/div/div/div/div[2]/div/nav/a[2]').nth(0)
|
|
53
|
+
await page.wait_for_timeout(3000); await elem.click(timeout=5000)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
# --> Assertions to verify final state
|
|
57
|
+
frame = context.pages[-1]
|
|
58
|
+
try:
|
|
59
|
+
await expect(frame.locator('text=Performance Targets Met Successfully').first).to_be_visible(timeout=1000)
|
|
60
|
+
except AssertionError:
|
|
61
|
+
raise AssertionError("Test case failed: The documentation site did not meet the performance targets. FCP was not under 1.5 seconds, CLS was not below 0.1, or the page did not load fully within 2 seconds on standard broadband.")
|
|
62
|
+
await asyncio.sleep(5)
|
|
63
|
+
|
|
64
|
+
finally:
|
|
65
|
+
if context:
|
|
66
|
+
await context.close()
|
|
67
|
+
if browser:
|
|
68
|
+
await browser.close()
|
|
69
|
+
if pw:
|
|
70
|
+
await pw.stop()
|
|
71
|
+
|
|
72
|
+
asyncio.run(run_test())
|
|
73
|
+
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
{
|
|
2
|
+
"meta": {
|
|
3
|
+
"project": "VitePress Documentation Site for @codeguide/core",
|
|
4
|
+
"date": "2025-11-04",
|
|
5
|
+
"prepared_by": "CodeGuide Team"
|
|
6
|
+
},
|
|
7
|
+
"product_overview": "A modern, fast, and developer-friendly documentation site for the @codeguide/core TypeScript SDK, implemented with VitePress. It offers a searchable, navigable, mobile-responsive, dark-mode supported platform integrated seamlessly with GitHub to enhance developer experience and SDK adoption.",
|
|
8
|
+
"core_goals": [
|
|
9
|
+
"Migrate traditional markdown documentation to an interactive, searchable site.",
|
|
10
|
+
"Provide an intuitive and fast-loading documentation experience with excellent navigation.",
|
|
11
|
+
"Enable easy content updates and community contributions using markdown authoring.",
|
|
12
|
+
"Improve SEO and content discoverability for the SDK documentation.",
|
|
13
|
+
"Ensure brand consistency with cohesive styling and theming matching CodeGuide standards."
|
|
14
|
+
],
|
|
15
|
+
"key_features": [
|
|
16
|
+
"Homepage featuring a hero section with quick start guidance and feature highlights.",
|
|
17
|
+
"Hierarchical and collapsible sidebar navigation organized by documentation topics.",
|
|
18
|
+
"Full-text local search across all markdown content with keyboard shortcuts and results highlighting.",
|
|
19
|
+
"Dark mode support with automatic system theme detection and manual toggle persisting user preferences.",
|
|
20
|
+
"Mobile-responsive design optimized for various device sizes with touch-friendly navigation.",
|
|
21
|
+
"GitHub integration with 'Edit this page' links and repository social icons.",
|
|
22
|
+
"Syntax highlighting for TypeScript and JavaScript code samples with copy functionality.",
|
|
23
|
+
"Auto-generated table of contents and structured content layout.",
|
|
24
|
+
"Custom branding and styling including brand colors and enhanced UI components.",
|
|
25
|
+
"Development workflows for easy local content updates, preview, and build processes."
|
|
26
|
+
],
|
|
27
|
+
"user_flow_summary": [
|
|
28
|
+
"User lands on the homepage to view hero message, features, and quick start guide.",
|
|
29
|
+
"User navigates through sidebar or top navigation to explore documentation sections.",
|
|
30
|
+
"User performs a search using Ctrl/Cmd+K to find specific information with highlighted results.",
|
|
31
|
+
"User toggles dark mode manually or uses system preference to switch themes.",
|
|
32
|
+
"User clicks 'Edit this page on GitHub' to propose changes or view source file.",
|
|
33
|
+
"User accesses documentation on mobile device with responsive menu and touch support.",
|
|
34
|
+
"Developers update documentation by editing markdown files locally and preview changes with hot reload.",
|
|
35
|
+
"Content is built and deployed through CI/CD pipelines to static hosting platforms."
|
|
36
|
+
],
|
|
37
|
+
"validation_criteria": [
|
|
38
|
+
"Documentation site loads under 2 seconds on standard broadband connections.",
|
|
39
|
+
"Full-text search returns accurate results with fast response and supports keyboard navigation.",
|
|
40
|
+
"Dark mode toggle works correctly and persists user choice across sessions.",
|
|
41
|
+
"Mobile responsiveness verified on common device screen sizes with smooth navigation.",
|
|
42
|
+
"GitHub edit links direct correctly to corresponding markdown files in repository.",
|
|
43
|
+
"Code highlighting accurately presents TypeScript/JavaScript samples with line numbers and copy feature.",
|
|
44
|
+
"All navigation links correctly route within the site with active page highlighting.",
|
|
45
|
+
"Performance metrics meet or exceed targets (e.g. FCP < 1.5s, CLS < 0.1).",
|
|
46
|
+
"Accessibility standards (WCAG AA) met including keyboard navigation and color contrast.",
|
|
47
|
+
"Successful local development workflow with no build errors and hot module replacement functioning."
|
|
48
|
+
],
|
|
49
|
+
"code_summary": {
|
|
50
|
+
"tech_stack": [
|
|
51
|
+
"VitePress",
|
|
52
|
+
"Vue.js",
|
|
53
|
+
"TypeScript",
|
|
54
|
+
"Markdown"
|
|
55
|
+
],
|
|
56
|
+
"features": [
|
|
57
|
+
{
|
|
58
|
+
"name": "generateQuestionnaire",
|
|
59
|
+
"description": "Generates a questionnaire for a task description to gather additional context. Supports task description, project context, repository info, and file attachments.",
|
|
60
|
+
"files": [
|
|
61
|
+
"codespace-service.md"
|
|
62
|
+
]
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"name": "createCodespaceTask",
|
|
66
|
+
"description": "Creates a codespace task using the legacy endpoint for backward compatibility. Supports task title, description, and optional conversation ID.",
|
|
67
|
+
"files": [
|
|
68
|
+
"codespace-service.md"
|
|
69
|
+
]
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"name": "getCodespaceModels",
|
|
73
|
+
"description": "Retrieves all available codespace models with optional filtering by provider ID or execution mode. Returns models with provider information.",
|
|
74
|
+
"files": [
|
|
75
|
+
"codespace-service.md"
|
|
76
|
+
]
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"name": "getCodespaceModel",
|
|
80
|
+
"description": "Retrieves a specific codespace model by ID with provider information including name, execution mode, and base URLs.",
|
|
81
|
+
"files": [
|
|
82
|
+
"codespace-service.md"
|
|
83
|
+
]
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"name": "getLLMModelProviders",
|
|
87
|
+
"description": "Retrieves all available LLM model providers with their IDs, names, keys, and logo sources.",
|
|
88
|
+
"files": [
|
|
89
|
+
"codespace-service.md"
|
|
90
|
+
]
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"name": "getLLMModelProvider",
|
|
94
|
+
"description": "Retrieves a specific LLM model provider by ID with complete provider information.",
|
|
95
|
+
"files": [
|
|
96
|
+
"codespace-service.md"
|
|
97
|
+
]
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"name": "getModelsByProvider",
|
|
101
|
+
"description": "Retrieves all models for a specific provider by provider ID, returning an array of codespace models.",
|
|
102
|
+
"files": [
|
|
103
|
+
"codespace-service.md"
|
|
104
|
+
]
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"name": "TypeExports",
|
|
108
|
+
"description": "Exports TypeScript type definitions for codespace service including request/response types, task types, model types, and provider types.",
|
|
109
|
+
"files": [
|
|
110
|
+
"codespace-service.md"
|
|
111
|
+
]
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"name": "RelatedDocumentation",
|
|
115
|
+
"description": "Provides cross-references to related documentation including Codespace Models, Projects Service, and CodeGuide Client documentation.",
|
|
116
|
+
"files": [
|
|
117
|
+
"codespace-service.md"
|
|
118
|
+
]
|
|
119
|
+
}
|
|
120
|
+
]
|
|
121
|
+
}
|
|
122
|
+
}
|