@autocode-cli/autocode 0.1.14 → 0.1.17
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/README.md +38 -38
- package/dist/cli/commands/comment.d.ts +1 -1
- package/dist/cli/commands/comment.js +11 -11
- package/dist/cli/commands/comment.js.map +1 -1
- package/dist/cli/commands/init.js +1 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/list.d.ts +1 -1
- package/dist/cli/commands/list.d.ts.map +1 -1
- package/dist/cli/commands/list.js +65 -22
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/move.d.ts +1 -1
- package/dist/cli/commands/move.js +12 -12
- package/dist/cli/commands/move.js.map +1 -1
- package/dist/cli/commands/new.d.ts +1 -1
- package/dist/cli/commands/new.d.ts.map +1 -1
- package/dist/cli/commands/new.js +26 -13
- package/dist/cli/commands/new.js.map +1 -1
- package/dist/cli/commands/next.d.ts +1 -1
- package/dist/cli/commands/next.js +15 -15
- package/dist/cli/commands/next.js.map +1 -1
- package/dist/cli/commands/parent.d.ts +9 -0
- package/dist/cli/commands/parent.d.ts.map +1 -0
- package/dist/cli/commands/parent.js +94 -0
- package/dist/cli/commands/parent.js.map +1 -0
- package/dist/cli/commands/serve.js +8 -8
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/commands/show.d.ts +1 -1
- package/dist/cli/commands/show.d.ts.map +1 -1
- package/dist/cli/commands/show.js +51 -31
- package/dist/cli/commands/show.js.map +1 -1
- package/dist/cli/commands/stats.js +2 -2
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/commands/sync.js +3 -3
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/parser.d.ts.map +1 -1
- package/dist/cli/parser.js +5 -3
- package/dist/cli/parser.js.map +1 -1
- package/dist/core/column.js +2 -2
- package/dist/core/column.js.map +1 -1
- package/dist/core/hierarchy.d.ts +97 -0
- package/dist/core/hierarchy.d.ts.map +1 -0
- package/dist/core/hierarchy.js +274 -0
- package/dist/core/hierarchy.js.map +1 -0
- package/dist/core/issue.d.ts +62 -0
- package/dist/core/issue.d.ts.map +1 -0
- package/dist/core/issue.js +247 -0
- package/dist/core/issue.js.map +1 -0
- package/dist/core/sync.d.ts +9 -9
- package/dist/core/sync.d.ts.map +1 -1
- package/dist/core/sync.js +61 -58
- package/dist/core/sync.js.map +1 -1
- package/dist/core/workflow.d.ts +22 -20
- package/dist/core/workflow.d.ts.map +1 -1
- package/dist/core/workflow.js +68 -51
- package/dist/core/workflow.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/server/api-autocomplete.test.d.ts +6 -0
- package/dist/server/api-autocomplete.test.d.ts.map +1 -0
- package/dist/server/api-autocomplete.test.js +249 -0
- package/dist/server/api-autocomplete.test.js.map +1 -0
- package/dist/server/api.d.ts.map +1 -1
- package/dist/server/api.js +216 -106
- package/dist/server/api.js.map +1 -1
- package/dist/server/dashboard/pages/column-prompt.d.ts +1 -1
- package/dist/server/dashboard/pages/column-prompt.d.ts.map +1 -1
- package/dist/server/dashboard/pages/column-prompt.js +11 -11
- package/dist/server/dashboard/pages/column-prompt.js.map +1 -1
- package/dist/server/dashboard/pages/column-terminal.d.ts +1 -1
- package/dist/server/dashboard/pages/column-terminal.d.ts.map +1 -1
- package/dist/server/dashboard/pages/column-terminal.js +14 -14
- package/dist/server/dashboard/pages/column-terminal.js.map +1 -1
- package/dist/server/dashboard/pages/index.d.ts +3 -1
- package/dist/server/dashboard/pages/index.d.ts.map +1 -1
- package/dist/server/dashboard/pages/index.js +3 -1
- package/dist/server/dashboard/pages/index.js.map +1 -1
- package/dist/server/dashboard/pages/issue-graph.d.ts +9 -0
- package/dist/server/dashboard/pages/issue-graph.d.ts.map +1 -0
- package/dist/server/dashboard/pages/issue-graph.js +581 -0
- package/dist/server/dashboard/pages/issue-graph.js.map +1 -0
- package/dist/server/dashboard/pages/issue-view.d.ts +8 -0
- package/dist/server/dashboard/pages/issue-view.d.ts.map +1 -0
- package/dist/server/dashboard/pages/{ticket-view.js → issue-view.js} +128 -128
- package/dist/server/dashboard/pages/issue-view.js.map +1 -0
- package/dist/server/dashboard/pages/main-dashboard.js +21 -21
- package/dist/server/dashboard/pages/main-dashboard.js.map +1 -1
- package/dist/server/dashboard/pages/new-issue.d.ts +8 -0
- package/dist/server/dashboard/pages/new-issue.d.ts.map +1 -0
- package/dist/server/dashboard/pages/new-issue.js +648 -0
- package/dist/server/dashboard/pages/new-issue.js.map +1 -0
- package/dist/server/dashboard/pages/new-issue.test.d.ts +6 -0
- package/dist/server/dashboard/pages/new-issue.test.d.ts.map +1 -0
- package/dist/server/dashboard/pages/new-issue.test.js +349 -0
- package/dist/server/dashboard/pages/new-issue.test.js.map +1 -0
- package/dist/server/dashboard/pages/pipeline-configurator.js +1 -1
- package/dist/server/dashboard/pages/shared.d.ts +2 -2
- package/dist/server/dashboard/pages/shared.d.ts.map +1 -1
- package/dist/server/dashboard/pages/shared.js +5 -5
- package/dist/server/dashboard/pages/shared.js.map +1 -1
- package/dist/server/dashboard/pages/stats-page.js +11 -11
- package/dist/server/dashboard/scripts/index.js +134 -134
- package/dist/server/dashboard/styles/board.d.ts +1 -1
- package/dist/server/dashboard/styles/board.js +10 -10
- package/dist/server/dashboard.d.ts +1 -1
- package/dist/server/dashboard.d.ts.map +1 -1
- package/dist/server/dashboard.js +1 -1
- package/dist/server/dashboard.js.map +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +40 -24
- package/dist/server/index.js.map +1 -1
- package/dist/server/websocket.d.ts +6 -6
- package/dist/server/websocket.d.ts.map +1 -1
- package/dist/server/websocket.js +10 -10
- package/dist/server/websocket.js.map +1 -1
- package/dist/services/claude.d.ts +13 -13
- package/dist/services/claude.d.ts.map +1 -1
- package/dist/services/claude.js +98 -98
- package/dist/services/claude.js.map +1 -1
- package/dist/services/issue-io.d.ts +81 -0
- package/dist/services/issue-io.d.ts.map +1 -0
- package/dist/services/{ticket-io.js → issue-io.js} +54 -53
- package/dist/services/issue-io.js.map +1 -0
- package/dist/services/stats.d.ts +2 -0
- package/dist/services/stats.d.ts.map +1 -1
- package/dist/services/stats.js.map +1 -1
- package/dist/types/index.d.ts +6 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/fs.d.ts +2 -2
- package/dist/utils/fs.d.ts.map +1 -1
- package/dist/utils/fs.js +2 -2
- package/dist/utils/fs.js.map +1 -1
- package/package.json +3 -3
- package/templates/catalog.yaml +2 -2
- package/templates/prompts/api-endpoints-test.en.md +2 -2
- package/templates/prompts/api-endpoints-test.fr.md +2 -2
- package/templates/prompts/backlog.en.md +6 -6
- package/templates/prompts/backlog.fr.md +1 -1
- package/templates/prompts/changelog.en.md +6 -6
- package/templates/prompts/changelog.fr.md +3 -3
- package/templates/prompts/dashboard-responsive.en.md +1 -1
- package/templates/prompts/deploy-prod.en.md +3 -3
- package/templates/prompts/deploy-prod.fr.md +3 -3
- package/templates/prompts/deploy-staging.en.md +3 -3
- package/templates/prompts/deploy-staging.fr.md +3 -3
- package/templates/prompts/design.en.md +5 -5
- package/templates/prompts/design.fr.md +3 -3
- package/templates/prompts/dev.en.md +4 -4
- package/templates/prompts/dev.fr.md +3 -3
- package/templates/prompts/done.en.md +5 -5
- package/templates/prompts/done.fr.md +2 -2
- package/templates/prompts/error-handling-review.en.md +1 -1
- package/templates/prompts/error-handling-review.fr.md +1 -1
- package/templates/prompts/file-watcher-test.en.md +4 -4
- package/templates/prompts/file-watcher-test.fr.md +1 -1
- package/templates/prompts/git-commit.en.md +5 -5
- package/templates/prompts/git-commit.fr.md +3 -3
- package/templates/prompts/git-push.en.md +3 -3
- package/templates/prompts/git-push.fr.md +3 -3
- package/templates/prompts/git-tag.en.md +3 -3
- package/templates/prompts/git-tag.fr.md +3 -3
- package/templates/prompts/in-progress.en.md +6 -6
- package/templates/prompts/in-progress.fr.md +3 -3
- package/templates/prompts/qualification.en.md +8 -8
- package/templates/prompts/qualification.fr.md +3 -3
- package/templates/prompts/retest-cypress.en.md +3 -3
- package/templates/prompts/retest-cypress.fr.md +3 -3
- package/templates/prompts/retest-playwright.en.md +4 -4
- package/templates/prompts/retest-playwright.fr.md +3 -3
- package/templates/prompts/retest.en.md +4 -4
- package/templates/prompts/retest.fr.md +3 -3
- package/templates/prompts/review-best-practices.en.md +3 -3
- package/templates/prompts/review-best-practices.fr.md +3 -3
- package/templates/prompts/review-code.en.md +4 -4
- package/templates/prompts/review-code.fr.md +3 -3
- package/templates/prompts/review-consistency.en.md +3 -3
- package/templates/prompts/review-consistency.fr.md +3 -3
- package/templates/prompts/review-no-duplication.en.md +3 -3
- package/templates/prompts/review-no-duplication.fr.md +3 -3
- package/templates/prompts/review-security.en.md +4 -4
- package/templates/prompts/review-security.fr.md +3 -3
- package/templates/prompts/specification.en.md +5 -5
- package/templates/prompts/specification.fr.md +3 -3
- package/templates/prompts/splitter.en.md +13 -13
- package/templates/prompts/splitter.fr.md +3 -3
- package/templates/prompts/template-validation.en.md +1 -1
- package/templates/prompts/template-validation.fr.md +1 -1
- package/templates/prompts/testing-coverage.en.md +1 -1
- package/templates/prompts/testing-coverage.fr.md +1 -1
- package/templates/prompts/testing-cypress.en.md +4 -4
- package/templates/prompts/testing-cypress.fr.md +3 -3
- package/templates/prompts/testing-integration.en.md +4 -4
- package/templates/prompts/testing-integration.fr.md +3 -3
- package/templates/prompts/testing-playwright.en.md +4 -4
- package/templates/prompts/testing-playwright.fr.md +3 -3
- package/templates/prompts/testing-unit.en.md +4 -4
- package/templates/prompts/testing-unit.fr.md +3 -3
- package/templates/prompts/update-docs.en.md +3 -3
- package/templates/prompts/update-docs.fr.md +3 -3
- package/templates/prompts/validate-staging.en.md +3 -3
- package/templates/prompts/validate-staging.fr.md +3 -3
- package/templates/prompts/websocket-test.en.md +1 -1
- package/dist/core/ticket.d.ts +0 -50
- package/dist/core/ticket.d.ts.map +0 -1
- package/dist/core/ticket.js +0 -224
- package/dist/core/ticket.js.map +0 -1
- package/dist/server/dashboard/pages/ticket-view.d.ts +0 -8
- package/dist/server/dashboard/pages/ticket-view.d.ts.map +0 -1
- package/dist/server/dashboard/pages/ticket-view.js.map +0 -1
- package/dist/services/ticket-io.d.ts +0 -80
- package/dist/services/ticket-io.d.ts.map +0 -1
- package/dist/services/ticket-io.js.map +0 -1
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Issue view page generator
|
|
3
3
|
*/
|
|
4
4
|
import { getConfig } from '../../../utils/config.js';
|
|
5
|
-
import {
|
|
5
|
+
import { getIssue } from '../../../core/issue.js';
|
|
6
6
|
import { getColumns } from '../../../core/column.js';
|
|
7
7
|
import { escapeHtml } from '../utils.js';
|
|
8
8
|
import { generate404Page } from './shared.js';
|
|
9
9
|
/**
|
|
10
|
-
* Generate the
|
|
10
|
+
* Generate the issue view page
|
|
11
11
|
*/
|
|
12
|
-
export function
|
|
12
|
+
export function generateIssueViewPage(issueKey, lang) {
|
|
13
13
|
const config = getConfig();
|
|
14
|
-
const
|
|
14
|
+
const issue = getIssue(config.root, issueKey);
|
|
15
15
|
const columns = getColumns();
|
|
16
|
-
if (!
|
|
17
|
-
return generate404Page(
|
|
16
|
+
if (!issue) {
|
|
17
|
+
return generate404Page(issueKey, lang);
|
|
18
18
|
}
|
|
19
|
-
const currentColumn = columns.find(c => c.slug ===
|
|
20
|
-
const
|
|
19
|
+
const currentColumn = columns.find(c => c.slug === issue.column_slug);
|
|
20
|
+
const issueData = JSON.stringify(issue);
|
|
21
21
|
const columnsData = JSON.stringify(columns);
|
|
22
22
|
return `<!DOCTYPE html>
|
|
23
23
|
<html lang="${lang}">
|
|
24
24
|
<head>
|
|
25
25
|
<meta charset="UTF-8">
|
|
26
26
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
27
|
-
<title>${escapeHtml(
|
|
27
|
+
<title>${escapeHtml(issue.title)} - ${issueKey} - AutoCode</title>
|
|
28
28
|
<style>
|
|
29
29
|
:root {
|
|
30
30
|
--bg: #0a0a0f;
|
|
@@ -68,13 +68,13 @@ export function generateTicketViewPage(ticketKey, lang) {
|
|
|
68
68
|
gap: 8px;
|
|
69
69
|
}
|
|
70
70
|
.back-btn:hover { color: var(--text); }
|
|
71
|
-
.
|
|
71
|
+
.issue-header-info {
|
|
72
72
|
flex: 1;
|
|
73
73
|
display: flex;
|
|
74
74
|
align-items: center;
|
|
75
75
|
gap: 16px;
|
|
76
76
|
}
|
|
77
|
-
.
|
|
77
|
+
.issue-key {
|
|
78
78
|
font-family: 'SF Mono', Monaco, monospace;
|
|
79
79
|
font-size: 12px;
|
|
80
80
|
color: var(--accent);
|
|
@@ -83,7 +83,7 @@ export function generateTicketViewPage(ticketKey, lang) {
|
|
|
83
83
|
border-radius: 4px;
|
|
84
84
|
font-weight: 600;
|
|
85
85
|
}
|
|
86
|
-
.
|
|
86
|
+
.issue-title {
|
|
87
87
|
font-size: 18px;
|
|
88
88
|
font-weight: 600;
|
|
89
89
|
}
|
|
@@ -103,7 +103,7 @@ export function generateTicketViewPage(ticketKey, lang) {
|
|
|
103
103
|
}
|
|
104
104
|
.lang-btn:hover { border-color: var(--accent); color: var(--text); }
|
|
105
105
|
.lang-btn.active { background: var(--accent); border-color: var(--accent); color: white; }
|
|
106
|
-
.
|
|
106
|
+
.issue-title-input {
|
|
107
107
|
flex: 1;
|
|
108
108
|
background: transparent;
|
|
109
109
|
border: 1px solid transparent;
|
|
@@ -114,8 +114,8 @@ export function generateTicketViewPage(ticketKey, lang) {
|
|
|
114
114
|
border-radius: 4px;
|
|
115
115
|
font-family: inherit;
|
|
116
116
|
}
|
|
117
|
-
.
|
|
118
|
-
.
|
|
117
|
+
.issue-title-input:hover { border-color: var(--border); }
|
|
118
|
+
.issue-title-input:focus {
|
|
119
119
|
outline: none;
|
|
120
120
|
border-color: var(--accent);
|
|
121
121
|
background: var(--bg-tertiary);
|
|
@@ -185,8 +185,8 @@ export function generateTicketViewPage(ticketKey, lang) {
|
|
|
185
185
|
gap: 24px;
|
|
186
186
|
padding: 24px 48px;
|
|
187
187
|
}
|
|
188
|
-
.
|
|
189
|
-
.
|
|
188
|
+
.issue-details { display: flex; flex-direction: column; gap: 24px; }
|
|
189
|
+
.issue-bottom {
|
|
190
190
|
display: flex;
|
|
191
191
|
flex-direction: column;
|
|
192
192
|
gap: 24px;
|
|
@@ -205,7 +205,7 @@ export function generateTicketViewPage(ticketKey, lang) {
|
|
|
205
205
|
color: var(--muted);
|
|
206
206
|
margin-bottom: 16px;
|
|
207
207
|
}
|
|
208
|
-
.
|
|
208
|
+
.issue-meta {
|
|
209
209
|
display: flex;
|
|
210
210
|
flex-wrap: wrap;
|
|
211
211
|
gap: 12px;
|
|
@@ -601,9 +601,9 @@ export function generateTicketViewPage(ticketKey, lang) {
|
|
|
601
601
|
<body>
|
|
602
602
|
<header class="header">
|
|
603
603
|
<a href="/" class="back-btn">← Dashboard</a>
|
|
604
|
-
<div class="
|
|
605
|
-
<span class="
|
|
606
|
-
<input type="text" class="
|
|
604
|
+
<div class="issue-header-info">
|
|
605
|
+
<span class="issue-key">${escapeHtml(issueKey)}</span>
|
|
606
|
+
<input type="text" class="issue-title-input" id="issue-title" value="${escapeHtml(issue.title)}" />
|
|
607
607
|
</div>
|
|
608
608
|
<div class="lang-selector" id="lang-selector">
|
|
609
609
|
<button class="lang-btn" data-lang="en">EN</button>
|
|
@@ -612,23 +612,23 @@ export function generateTicketViewPage(ticketKey, lang) {
|
|
|
612
612
|
</header>
|
|
613
613
|
|
|
614
614
|
<main class="main-content">
|
|
615
|
-
<div class="
|
|
615
|
+
<div class="issue-details">
|
|
616
616
|
<!-- Meta info -->
|
|
617
617
|
<div class="section">
|
|
618
|
-
<div class="section-title" data-i18n="
|
|
619
|
-
<div class="
|
|
620
|
-
<span class="meta-badge priority-${
|
|
621
|
-
<span class="meta-badge column-badge">${escapeHtml(currentColumn?.name ||
|
|
622
|
-
<span class="meta-badge semver-badge">${
|
|
618
|
+
<div class="section-title" data-i18n="issueView.meta">Meta</div>
|
|
619
|
+
<div class="issue-meta">
|
|
620
|
+
<span class="meta-badge priority-${issue.priority}">${issue.priority}</span>
|
|
621
|
+
<span class="meta-badge column-badge">${escapeHtml(currentColumn?.name || issue.column_slug)}</span>
|
|
622
|
+
<span class="meta-badge semver-badge">${issue.semver}</span>
|
|
623
623
|
</div>
|
|
624
624
|
</div>
|
|
625
625
|
|
|
626
626
|
<!-- Labels -->
|
|
627
|
-
${
|
|
627
|
+
${issue.labels && issue.labels.length > 0 ? `
|
|
628
628
|
<div class="section">
|
|
629
|
-
<div class="section-title" data-i18n="
|
|
629
|
+
<div class="section-title" data-i18n="issueView.labels">Labels</div>
|
|
630
630
|
<div class="labels-list">
|
|
631
|
-
${
|
|
631
|
+
${issue.labels.map((label) => `<span class="label-tag">${escapeHtml(label)}</span>`).join('')}
|
|
632
632
|
</div>
|
|
633
633
|
</div>
|
|
634
634
|
` : ''}
|
|
@@ -636,33 +636,33 @@ export function generateTicketViewPage(ticketKey, lang) {
|
|
|
636
636
|
<!-- Description -->
|
|
637
637
|
<div class="section">
|
|
638
638
|
<div class="section-title">
|
|
639
|
-
<span data-i18n="
|
|
639
|
+
<span data-i18n="issueView.description">Description</span>
|
|
640
640
|
<button class="btn-edit-toggle" id="btn-edit-description" onclick="toggleDescriptionEdit()">✏️</button>
|
|
641
641
|
</div>
|
|
642
642
|
<div class="description-view" id="description-view"></div>
|
|
643
|
-
<textarea class="description-edit" id="description-edit" style="display:none" placeholder="Description (Markdown)">${escapeHtml(
|
|
643
|
+
<textarea class="description-edit" id="description-edit" style="display:none" placeholder="Description (Markdown)">${escapeHtml(issue.description || '')}</textarea>
|
|
644
644
|
</div>
|
|
645
645
|
|
|
646
646
|
<!-- Acceptance Criteria -->
|
|
647
|
-
${
|
|
647
|
+
${issue.acceptance_criteria && issue.acceptance_criteria.length > 0 ? `
|
|
648
648
|
<div class="section">
|
|
649
|
-
<div class="section-title" data-i18n="
|
|
649
|
+
<div class="section-title" data-i18n="issueView.criteria">Acceptance Criteria</div>
|
|
650
650
|
<ul class="criteria-list">
|
|
651
|
-
${
|
|
651
|
+
${issue.acceptance_criteria.map((c) => `<li class="criteria-item">${escapeHtml(c)}</li>`).join('')}
|
|
652
652
|
</ul>
|
|
653
653
|
</div>
|
|
654
654
|
` : ''}
|
|
655
655
|
|
|
656
656
|
<!-- History -->
|
|
657
|
-
${
|
|
657
|
+
${issue.history && issue.history.length > 0 ? `
|
|
658
658
|
<div class="section">
|
|
659
|
-
<div class="section-title" data-i18n="
|
|
659
|
+
<div class="section-title" data-i18n="issueView.history">History</div>
|
|
660
660
|
<ul class="history-list">
|
|
661
|
-
${
|
|
661
|
+
${issue.history.map((h) => {
|
|
662
662
|
const date = new Date(h.at);
|
|
663
663
|
const dateStr = date.toLocaleDateString('en-US', { day: '2-digit', month: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit' });
|
|
664
|
-
const showPromptBtn = h.to && h.action !== 'created' ? `<a href="/
|
|
665
|
-
const showLogBtn = h.to && h.action !== 'created' ? `<a href="/
|
|
664
|
+
const showPromptBtn = h.to && h.action !== 'created' ? `<a href="/issue/${issueKey}/${escapeHtml(h.to)}/prompt" class="btn-prompt" title="View prompt">📜</a>` : '';
|
|
665
|
+
const showLogBtn = h.to && h.action !== 'created' ? `<a href="/issue/${issueKey}/${escapeHtml(h.to)}/terminal" class="btn-prompt" title="View terminal log">🖥️</a>` : '';
|
|
666
666
|
return `<li class="history-item">
|
|
667
667
|
<span class="history-action">${h.action}</span>
|
|
668
668
|
${h.from ? `<span class="history-from">${escapeHtml(h.from)}</span> →` : ''}
|
|
@@ -678,20 +678,20 @@ export function generateTicketViewPage(ticketKey, lang) {
|
|
|
678
678
|
|
|
679
679
|
<!-- Actions bar -->
|
|
680
680
|
<div class="actions-bar">
|
|
681
|
-
<button class="btn btn-primary" id="btn-save" onclick="
|
|
682
|
-
<button class="btn btn-secondary" onclick="
|
|
683
|
-
<button class="btn btn-danger" onclick="
|
|
681
|
+
<button class="btn btn-primary" id="btn-save" onclick="saveIssue()" data-i18n="issueView.save">Save</button>
|
|
682
|
+
<button class="btn btn-secondary" onclick="advanceIssue()" data-i18n="issueView.moveNext">Move to next column</button>
|
|
683
|
+
<button class="btn btn-danger" onclick="archiveIssue()" data-i18n="issueView.archive">Archive</button>
|
|
684
684
|
</div>
|
|
685
685
|
</div>
|
|
686
686
|
|
|
687
687
|
<!-- Bottom section: Comments & Claude Terminal -->
|
|
688
|
-
<div class="
|
|
688
|
+
<div class="issue-bottom">
|
|
689
689
|
<!-- Comments -->
|
|
690
690
|
<div class="section comments-section">
|
|
691
|
-
<div class="section-title"><span data-i18n="
|
|
691
|
+
<div class="section-title"><span data-i18n="issueView.comments">Comments</span> (<span id="comments-count">${issue.comments?.length || 0}</span>)</div>
|
|
692
692
|
<div class="comments-list" id="comments-list"></div>
|
|
693
693
|
<div class="add-comment">
|
|
694
|
-
<textarea id="new-comment" placeholder="Add a comment..." data-i18n-placeholder="
|
|
694
|
+
<textarea id="new-comment" placeholder="Add a comment..." data-i18n-placeholder="issueView.addComment"></textarea>
|
|
695
695
|
<button class="btn-comment" onclick="addComment()" data-i18n="btn.add">Add</button>
|
|
696
696
|
</div>
|
|
697
697
|
</div>
|
|
@@ -699,7 +699,7 @@ export function generateTicketViewPage(ticketKey, lang) {
|
|
|
699
699
|
<!-- Claude Terminal -->
|
|
700
700
|
<div class="section claude-section" id="claude-section">
|
|
701
701
|
<div class="section-title">
|
|
702
|
-
<span data-i18n="
|
|
702
|
+
<span data-i18n="issueView.claudeTerminal">Claude Terminal</span>
|
|
703
703
|
<span class="claude-status" id="claude-status" data-i18n="status.waiting">Waiting</span>
|
|
704
704
|
</div>
|
|
705
705
|
<pre class="claude-log" id="claude-log"></pre>
|
|
@@ -723,35 +723,35 @@ export function generateTicketViewPage(ticketKey, lang) {
|
|
|
723
723
|
</div>
|
|
724
724
|
|
|
725
725
|
<script>
|
|
726
|
-
const
|
|
727
|
-
const
|
|
726
|
+
const ISSUE_KEY = '${issueKey}';
|
|
727
|
+
const ISSUE = ${issueData};
|
|
728
728
|
const COLUMNS = ${columnsData};
|
|
729
729
|
const STORAGE_KEY = 'autocode-lang';
|
|
730
730
|
|
|
731
731
|
let currentLang = localStorage.getItem(STORAGE_KEY) || 'fr';
|
|
732
|
-
let currentComments =
|
|
732
|
+
let currentComments = ISSUE.comments || [];
|
|
733
733
|
|
|
734
734
|
const translations = {
|
|
735
735
|
en: {
|
|
736
|
-
'
|
|
737
|
-
'
|
|
738
|
-
'
|
|
739
|
-
'
|
|
740
|
-
'
|
|
741
|
-
'
|
|
742
|
-
'
|
|
743
|
-
'
|
|
744
|
-
'
|
|
745
|
-
'
|
|
746
|
-
'
|
|
747
|
-
'
|
|
748
|
-
'
|
|
749
|
-
'
|
|
750
|
-
'
|
|
751
|
-
'
|
|
752
|
-
'
|
|
753
|
-
'
|
|
754
|
-
'
|
|
736
|
+
'issueView.meta': 'Meta',
|
|
737
|
+
'issueView.labels': 'Labels',
|
|
738
|
+
'issueView.description': 'Description',
|
|
739
|
+
'issueView.criteria': 'Acceptance Criteria',
|
|
740
|
+
'issueView.history': 'History',
|
|
741
|
+
'issueView.actions': 'Actions',
|
|
742
|
+
'issueView.save': 'Save',
|
|
743
|
+
'issueView.moveNext': 'Move to next column',
|
|
744
|
+
'issueView.archive': 'Archive',
|
|
745
|
+
'issueView.confirmMove': 'Move this issue to the next column?',
|
|
746
|
+
'issueView.confirmArchive': 'Archive this issue?',
|
|
747
|
+
'issueView.comments': 'Comments',
|
|
748
|
+
'issueView.addComment': 'Add a comment...',
|
|
749
|
+
'issueView.noComments': 'No comments yet',
|
|
750
|
+
'issueView.claudeTerminal': 'Claude Terminal',
|
|
751
|
+
'issueView.noDescription': 'No description',
|
|
752
|
+
'issueView.noLog': 'No log yet. Waiting for Claude processing...',
|
|
753
|
+
'issueView.loadingPrompt': 'Loading prompt...',
|
|
754
|
+
'issueView.promptError': 'Error',
|
|
755
755
|
'btn.add': 'Add',
|
|
756
756
|
'btn.sending': 'Sending...',
|
|
757
757
|
'btn.saving': 'Saving...',
|
|
@@ -760,31 +760,31 @@ export function generateTicketViewPage(ticketKey, lang) {
|
|
|
760
760
|
'status.completed': 'Completed',
|
|
761
761
|
'status.failed': 'Failed',
|
|
762
762
|
'notify.commentAdded': 'Comment added',
|
|
763
|
-
'notify.
|
|
764
|
-
'notify.
|
|
765
|
-
'notify.
|
|
763
|
+
'notify.issueAdvanced': 'Issue advanced',
|
|
764
|
+
'notify.issueArchived': 'Issue archived',
|
|
765
|
+
'notify.issueSaved': 'Issue saved',
|
|
766
766
|
'notify.error': 'Error'
|
|
767
767
|
},
|
|
768
768
|
fr: {
|
|
769
|
-
'
|
|
770
|
-
'
|
|
771
|
-
'
|
|
772
|
-
'
|
|
773
|
-
'
|
|
774
|
-
'
|
|
775
|
-
'
|
|
776
|
-
'
|
|
777
|
-
'
|
|
778
|
-
'
|
|
779
|
-
'
|
|
780
|
-
'
|
|
781
|
-
'
|
|
782
|
-
'
|
|
783
|
-
'
|
|
784
|
-
'
|
|
785
|
-
'
|
|
786
|
-
'
|
|
787
|
-
'
|
|
769
|
+
'issueView.meta': 'Méta',
|
|
770
|
+
'issueView.labels': 'Labels',
|
|
771
|
+
'issueView.description': 'Description',
|
|
772
|
+
'issueView.criteria': 'Critères d\\'acceptation',
|
|
773
|
+
'issueView.history': 'Historique',
|
|
774
|
+
'issueView.actions': 'Actions',
|
|
775
|
+
'issueView.save': 'Sauvegarder',
|
|
776
|
+
'issueView.moveNext': 'Déplacer vers la colonne suivante',
|
|
777
|
+
'issueView.archive': 'Archiver',
|
|
778
|
+
'issueView.confirmMove': 'Déplacer ce ticket vers la colonne suivante ?',
|
|
779
|
+
'issueView.confirmArchive': 'Archiver ce ticket ?',
|
|
780
|
+
'issueView.comments': 'Commentaires',
|
|
781
|
+
'issueView.addComment': 'Ajouter un commentaire...',
|
|
782
|
+
'issueView.noComments': 'Aucun commentaire',
|
|
783
|
+
'issueView.claudeTerminal': 'Terminal Claude',
|
|
784
|
+
'issueView.noDescription': 'Aucune description',
|
|
785
|
+
'issueView.noLog': 'Aucun log. En attente du traitement Claude...',
|
|
786
|
+
'issueView.loadingPrompt': 'Chargement du prompt...',
|
|
787
|
+
'issueView.promptError': 'Erreur',
|
|
788
788
|
'btn.add': 'Ajouter',
|
|
789
789
|
'btn.sending': 'Envoi...',
|
|
790
790
|
'btn.saving': 'Sauvegarde...',
|
|
@@ -793,9 +793,9 @@ export function generateTicketViewPage(ticketKey, lang) {
|
|
|
793
793
|
'status.completed': 'Terminé',
|
|
794
794
|
'status.failed': 'Échec',
|
|
795
795
|
'notify.commentAdded': 'Commentaire ajouté',
|
|
796
|
-
'notify.
|
|
797
|
-
'notify.
|
|
798
|
-
'notify.
|
|
796
|
+
'notify.issueAdvanced': 'Ticket avancé',
|
|
797
|
+
'notify.issueArchived': 'Ticket archivé',
|
|
798
|
+
'notify.issueSaved': 'Ticket sauvegardé',
|
|
799
799
|
'notify.error': 'Erreur'
|
|
800
800
|
}
|
|
801
801
|
};
|
|
@@ -845,7 +845,7 @@ export function generateTicketViewPage(ticketKey, lang) {
|
|
|
845
845
|
count.textContent = currentComments.length;
|
|
846
846
|
|
|
847
847
|
if (currentComments.length === 0) {
|
|
848
|
-
list.innerHTML = '<div class="no-comments">' + t('
|
|
848
|
+
list.innerHTML = '<div class="no-comments">' + t('issueView.noComments') + '</div>';
|
|
849
849
|
return;
|
|
850
850
|
}
|
|
851
851
|
|
|
@@ -885,7 +885,7 @@ export function generateTicketViewPage(ticketKey, lang) {
|
|
|
885
885
|
btn.textContent = t('btn.sending');
|
|
886
886
|
|
|
887
887
|
try {
|
|
888
|
-
const res = await fetch('/api/
|
|
888
|
+
const res = await fetch('/api/issues/' + ISSUE_KEY + '/comments', {
|
|
889
889
|
method: 'POST',
|
|
890
890
|
headers: { 'Content-Type': 'application/json' },
|
|
891
891
|
body: JSON.stringify({ text, source: 'user' })
|
|
@@ -914,7 +914,7 @@ export function generateTicketViewPage(ticketKey, lang) {
|
|
|
914
914
|
if (description) {
|
|
915
915
|
view.innerHTML = renderMarkdown(description);
|
|
916
916
|
} else {
|
|
917
|
-
view.innerHTML = '<span style="color: var(--muted)">' + t('
|
|
917
|
+
view.innerHTML = '<span style="color: var(--muted)">' + t('issueView.noDescription') + '</span>';
|
|
918
918
|
}
|
|
919
919
|
}
|
|
920
920
|
|
|
@@ -939,23 +939,23 @@ export function generateTicketViewPage(ticketKey, lang) {
|
|
|
939
939
|
}
|
|
940
940
|
}
|
|
941
941
|
|
|
942
|
-
async function
|
|
942
|
+
async function saveIssue() {
|
|
943
943
|
const btn = document.getElementById('btn-save');
|
|
944
944
|
btn.disabled = true;
|
|
945
945
|
btn.textContent = t('btn.saving');
|
|
946
946
|
|
|
947
947
|
try {
|
|
948
|
-
const res = await fetch('/api/
|
|
948
|
+
const res = await fetch('/api/issues/' + ISSUE_KEY, {
|
|
949
949
|
method: 'PATCH',
|
|
950
950
|
headers: { 'Content-Type': 'application/json' },
|
|
951
951
|
body: JSON.stringify({
|
|
952
|
-
title: document.getElementById('
|
|
952
|
+
title: document.getElementById('issue-title').value,
|
|
953
953
|
description: document.getElementById('description-edit').value
|
|
954
954
|
})
|
|
955
955
|
});
|
|
956
956
|
const result = await res.json();
|
|
957
957
|
if (result.success) {
|
|
958
|
-
showNotification(t('notify.
|
|
958
|
+
showNotification(t('notify.issueSaved'));
|
|
959
959
|
if (isEditingDescription) {
|
|
960
960
|
toggleDescriptionEdit();
|
|
961
961
|
}
|
|
@@ -966,21 +966,21 @@ export function generateTicketViewPage(ticketKey, lang) {
|
|
|
966
966
|
showNotification(t('notify.error') + ': ' + e.message, true);
|
|
967
967
|
} finally {
|
|
968
968
|
btn.disabled = false;
|
|
969
|
-
btn.textContent = t('
|
|
969
|
+
btn.textContent = t('issueView.save');
|
|
970
970
|
}
|
|
971
971
|
}
|
|
972
972
|
|
|
973
|
-
async function
|
|
974
|
-
if (!confirm(t('
|
|
973
|
+
async function advanceIssue() {
|
|
974
|
+
if (!confirm(t('issueView.confirmMove'))) return;
|
|
975
975
|
try {
|
|
976
|
-
const res = await fetch('/api/
|
|
976
|
+
const res = await fetch('/api/issues/' + ISSUE_KEY + '/next', {
|
|
977
977
|
method: 'POST',
|
|
978
978
|
headers: { 'Content-Type': 'application/json' },
|
|
979
979
|
body: JSON.stringify({ lang: currentLang })
|
|
980
980
|
});
|
|
981
981
|
const result = await res.json();
|
|
982
982
|
if (result.success) {
|
|
983
|
-
showNotification(t('notify.
|
|
983
|
+
showNotification(t('notify.issueAdvanced'));
|
|
984
984
|
setTimeout(() => location.reload(), 1000);
|
|
985
985
|
} else {
|
|
986
986
|
showNotification(t('notify.error') + ': ' + result.error, true);
|
|
@@ -990,17 +990,17 @@ export function generateTicketViewPage(ticketKey, lang) {
|
|
|
990
990
|
}
|
|
991
991
|
}
|
|
992
992
|
|
|
993
|
-
async function
|
|
994
|
-
if (!confirm(t('
|
|
993
|
+
async function archiveIssue() {
|
|
994
|
+
if (!confirm(t('issueView.confirmArchive'))) return;
|
|
995
995
|
try {
|
|
996
|
-
const res = await fetch('/api/
|
|
996
|
+
const res = await fetch('/api/issues/' + ISSUE_KEY + '/archive', {
|
|
997
997
|
method: 'POST',
|
|
998
998
|
headers: { 'Content-Type': 'application/json' },
|
|
999
999
|
body: JSON.stringify({ lang: currentLang })
|
|
1000
1000
|
});
|
|
1001
1001
|
const result = await res.json();
|
|
1002
1002
|
if (result.success) {
|
|
1003
|
-
showNotification(t('notify.
|
|
1003
|
+
showNotification(t('notify.issueArchived'));
|
|
1004
1004
|
setTimeout(() => location.href = '/', 1000);
|
|
1005
1005
|
} else {
|
|
1006
1006
|
showNotification(t('notify.error') + ': ' + result.error, true);
|
|
@@ -1044,23 +1044,23 @@ export function generateTicketViewPage(ticketKey, lang) {
|
|
|
1044
1044
|
try {
|
|
1045
1045
|
const data = JSON.parse(event.data);
|
|
1046
1046
|
switch (data.type) {
|
|
1047
|
-
case '
|
|
1048
|
-
if (data.key ===
|
|
1047
|
+
case 'issue_updated':
|
|
1048
|
+
if (data.key === ISSUE_KEY) {
|
|
1049
1049
|
location.reload();
|
|
1050
1050
|
}
|
|
1051
1051
|
break;
|
|
1052
1052
|
case 'claude_start':
|
|
1053
|
-
if (data.
|
|
1053
|
+
if (data.issue === ISSUE_KEY) {
|
|
1054
1054
|
onClaudeStart();
|
|
1055
1055
|
}
|
|
1056
1056
|
break;
|
|
1057
1057
|
case 'claude_stream':
|
|
1058
|
-
if (data.
|
|
1058
|
+
if (data.issue === ISSUE_KEY) {
|
|
1059
1059
|
fetchLog();
|
|
1060
1060
|
}
|
|
1061
1061
|
break;
|
|
1062
1062
|
case 'claude_end':
|
|
1063
|
-
if (data.
|
|
1063
|
+
if (data.issue === ISSUE_KEY) {
|
|
1064
1064
|
onClaudeEnd(data.success, data.duration);
|
|
1065
1065
|
}
|
|
1066
1066
|
break;
|
|
@@ -1255,7 +1255,7 @@ export function generateTicketViewPage(ticketKey, lang) {
|
|
|
1255
1255
|
|
|
1256
1256
|
async function fetchLog() {
|
|
1257
1257
|
try {
|
|
1258
|
-
const res = await fetch('/api/
|
|
1258
|
+
const res = await fetch('/api/issues/' + ISSUE_KEY + '/log');
|
|
1259
1259
|
const json = await res.json();
|
|
1260
1260
|
const log = document.getElementById('claude-log');
|
|
1261
1261
|
|
|
@@ -1263,7 +1263,7 @@ export function generateTicketViewPage(ticketKey, lang) {
|
|
|
1263
1263
|
log.innerHTML = formatLogContent(json.data.content || '');
|
|
1264
1264
|
log.scrollTop = log.scrollHeight;
|
|
1265
1265
|
} else {
|
|
1266
|
-
log.innerHTML = '<div class="log-entry system">' + t('
|
|
1266
|
+
log.innerHTML = '<div class="log-entry system">' + t('issueView.noLog') + '</div>';
|
|
1267
1267
|
}
|
|
1268
1268
|
} catch (e) {
|
|
1269
1269
|
console.error('Log fetch error:', e);
|
|
@@ -1296,22 +1296,22 @@ export function generateTicketViewPage(ticketKey, lang) {
|
|
|
1296
1296
|
const title = document.getElementById('prompt-modal-title');
|
|
1297
1297
|
const content = document.getElementById('prompt-modal-content');
|
|
1298
1298
|
|
|
1299
|
-
title.textContent = t('
|
|
1299
|
+
title.textContent = t('issueView.loadingPrompt');
|
|
1300
1300
|
content.textContent = '';
|
|
1301
1301
|
modal.classList.add('visible');
|
|
1302
1302
|
|
|
1303
1303
|
try {
|
|
1304
|
-
const res = await fetch('/api/
|
|
1304
|
+
const res = await fetch('/api/issues/' + ISSUE_KEY + '/prompt/' + columnSlug);
|
|
1305
1305
|
const json = await res.json();
|
|
1306
1306
|
if (json.success) {
|
|
1307
1307
|
title.textContent = 'Prompt → ' + json.data.column;
|
|
1308
1308
|
content.textContent = json.data.prompt;
|
|
1309
1309
|
} else {
|
|
1310
|
-
title.textContent = t('
|
|
1310
|
+
title.textContent = t('issueView.promptError');
|
|
1311
1311
|
content.textContent = json.error || 'Error loading prompt';
|
|
1312
1312
|
}
|
|
1313
1313
|
} catch (e) {
|
|
1314
|
-
title.textContent = t('
|
|
1314
|
+
title.textContent = t('issueView.promptError');
|
|
1315
1315
|
content.textContent = e.message;
|
|
1316
1316
|
}
|
|
1317
1317
|
}
|
|
@@ -1327,26 +1327,26 @@ export function generateTicketViewPage(ticketKey, lang) {
|
|
|
1327
1327
|
const title = document.getElementById('prompt-modal-title');
|
|
1328
1328
|
const content = document.getElementById('prompt-modal-content');
|
|
1329
1329
|
|
|
1330
|
-
title.textContent = t('
|
|
1330
|
+
title.textContent = t('issueView.loadingLog') || 'Loading log...';
|
|
1331
1331
|
content.textContent = '';
|
|
1332
1332
|
modal.classList.add('visible');
|
|
1333
1333
|
|
|
1334
1334
|
try {
|
|
1335
|
-
const res = await fetch('/api/
|
|
1335
|
+
const res = await fetch('/api/issues/' + ISSUE_KEY + '/log/' + columnSlug);
|
|
1336
1336
|
const json = await res.json();
|
|
1337
1337
|
if (json.success) {
|
|
1338
1338
|
title.textContent = 'Terminal → ' + columnSlug;
|
|
1339
1339
|
if (json.data.content) {
|
|
1340
1340
|
content.innerHTML = formatLogContent(json.data.content);
|
|
1341
1341
|
} else {
|
|
1342
|
-
content.textContent = t('
|
|
1342
|
+
content.textContent = t('issueView.noLog') || 'No log available';
|
|
1343
1343
|
}
|
|
1344
1344
|
} else {
|
|
1345
|
-
title.textContent = t('
|
|
1345
|
+
title.textContent = t('issueView.logError') || 'Log Error';
|
|
1346
1346
|
content.textContent = json.error || 'Error loading log';
|
|
1347
1347
|
}
|
|
1348
1348
|
} catch (e) {
|
|
1349
|
-
title.textContent = t('
|
|
1349
|
+
title.textContent = t('issueView.logError') || 'Log Error';
|
|
1350
1350
|
content.textContent = e.message;
|
|
1351
1351
|
}
|
|
1352
1352
|
}
|
|
@@ -1361,4 +1361,4 @@ export function generateTicketViewPage(ticketKey, lang) {
|
|
|
1361
1361
|
</body>
|
|
1362
1362
|
</html>`;
|
|
1363
1363
|
}
|
|
1364
|
-
//# sourceMappingURL=
|
|
1364
|
+
//# sourceMappingURL=issue-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-view.js","sourceRoot":"","sources":["../../../../src/server/dashboard/pages/issue-view.ts"],"names":[],"mappings":"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"}
|