@autocode-cli/autocode 0.0.35 → 0.0.37

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.
@@ -5,4 +5,8 @@
5
5
  * Generate the full dashboard HTML
6
6
  */
7
7
  export declare function generateDashboard(): string;
8
+ /**
9
+ * Generate column edit page
10
+ */
11
+ export declare function generateColumnEditPage(slug: string, lang: string): string;
8
12
  //# sourceMappingURL=dashboard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/server/dashboard.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAmL1C"}
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/server/dashboard.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAmL1C;AA+tDD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CA4RzE"}
@@ -368,6 +368,8 @@ function getStyles() {
368
368
  padding: 4px;
369
369
  opacity: 0.6;
370
370
  transition: opacity 0.3s;
371
+ text-decoration: none;
372
+ display: inline-block;
371
373
  }
372
374
  .btn-action:hover { opacity: 1; }
373
375
 
@@ -1202,7 +1204,7 @@ function getScript() {
1202
1204
  div.innerHTML = '<div class="column-header">' +
1203
1205
  '<span class="column-title">' + col.name + '</span>' +
1204
1206
  '<div class="column-header-actions">' +
1205
- '<button class="btn-action" title="ACTION.md" onclick="openActionModal(\\'' + col.slug + '\\')">\\u{1F4D8}</button>' +
1207
+ '<a class="btn-action" title="ACTION.md" href="/column/' + col.slug + '/edit">\\u{1F4D8}</a>' +
1206
1208
  '<span class="column-count">' + tickets.length + '</span>' +
1207
1209
  '</div></div>' +
1208
1210
  '<div class="column-body">' +
@@ -1938,4 +1940,291 @@ function getScript() {
1938
1940
  connectWebSocket();
1939
1941
  `;
1940
1942
  }
1943
+ /**
1944
+ * Generate column edit page
1945
+ */
1946
+ export function generateColumnEditPage(slug, lang) {
1947
+ const columns = getColumns();
1948
+ const column = columns.find(c => c.slug === slug);
1949
+ const columnName = column?.name || slug;
1950
+ return `<!DOCTYPE html>
1951
+ <html lang="${lang}">
1952
+ <head>
1953
+ <meta charset="UTF-8">
1954
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
1955
+ <title>Edit: ${escapeHtml(columnName)} - AutoCode</title>
1956
+ <style>
1957
+ :root {
1958
+ --bg: #0d1117;
1959
+ --bg-card: #161b22;
1960
+ --border: #30363d;
1961
+ --fg: #c9d1d9;
1962
+ --muted: #8b949e;
1963
+ --accent: #7c3aed;
1964
+ --blue: #4dabf7;
1965
+ --green: #22c55e;
1966
+ --red: #ef4444;
1967
+ }
1968
+ * { margin: 0; padding: 0; box-sizing: border-box; }
1969
+ body {
1970
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
1971
+ background: var(--bg);
1972
+ color: var(--fg);
1973
+ height: 100vh;
1974
+ display: flex;
1975
+ flex-direction: column;
1976
+ }
1977
+ .header {
1978
+ background: var(--bg-card);
1979
+ border-bottom: 1px solid var(--border);
1980
+ padding: 16px 24px;
1981
+ display: flex;
1982
+ align-items: center;
1983
+ gap: 16px;
1984
+ }
1985
+ .back-btn {
1986
+ background: none;
1987
+ border: 1px solid var(--border);
1988
+ color: var(--fg);
1989
+ padding: 8px 12px;
1990
+ border-radius: 6px;
1991
+ cursor: pointer;
1992
+ font-size: 14px;
1993
+ display: flex;
1994
+ align-items: center;
1995
+ gap: 6px;
1996
+ text-decoration: none;
1997
+ }
1998
+ .back-btn:hover { border-color: var(--accent); color: var(--accent); }
1999
+ .title {
2000
+ flex: 1;
2001
+ font-size: 18px;
2002
+ font-weight: 600;
2003
+ }
2004
+ .title span { color: var(--muted); font-weight: 400; }
2005
+ .lang-selector {
2006
+ display: flex;
2007
+ gap: 4px;
2008
+ }
2009
+ .lang-btn {
2010
+ background: var(--bg);
2011
+ border: 1px solid var(--border);
2012
+ color: var(--muted);
2013
+ padding: 6px 12px;
2014
+ border-radius: 4px;
2015
+ cursor: pointer;
2016
+ font-size: 13px;
2017
+ font-weight: 600;
2018
+ }
2019
+ .lang-btn.active { background: var(--accent); color: white; border-color: var(--accent); }
2020
+ .lang-btn:hover:not(.active) { border-color: var(--accent); color: var(--fg); }
2021
+ .actions {
2022
+ display: flex;
2023
+ gap: 8px;
2024
+ }
2025
+ .btn {
2026
+ padding: 8px 16px;
2027
+ border-radius: 6px;
2028
+ font-size: 14px;
2029
+ font-weight: 500;
2030
+ cursor: pointer;
2031
+ border: none;
2032
+ }
2033
+ .btn-save { background: var(--green); color: white; }
2034
+ .btn-save:hover { opacity: 0.9; }
2035
+ .btn-save:disabled { opacity: 0.5; cursor: not-allowed; }
2036
+ .editor-container {
2037
+ flex: 1;
2038
+ padding: 16px 24px;
2039
+ display: flex;
2040
+ flex-direction: column;
2041
+ overflow: hidden;
2042
+ }
2043
+ .editor {
2044
+ flex: 1;
2045
+ width: 100%;
2046
+ background: var(--bg-card);
2047
+ border: 1px solid var(--border);
2048
+ border-radius: 8px;
2049
+ color: var(--fg);
2050
+ font-family: 'JetBrains Mono', 'Fira Code', monospace;
2051
+ font-size: 14px;
2052
+ line-height: 1.6;
2053
+ padding: 16px;
2054
+ resize: none;
2055
+ outline: none;
2056
+ }
2057
+ .editor:focus { border-color: var(--accent); }
2058
+ .status-bar {
2059
+ display: flex;
2060
+ justify-content: space-between;
2061
+ align-items: center;
2062
+ padding: 8px 0;
2063
+ font-size: 12px;
2064
+ color: var(--muted);
2065
+ }
2066
+ .status-bar .modified { color: var(--accent); font-weight: 600; }
2067
+ .status-bar .saved { color: var(--green); }
2068
+ .notification {
2069
+ position: fixed;
2070
+ bottom: 24px;
2071
+ right: 24px;
2072
+ background: var(--bg-card);
2073
+ border: 1px solid var(--border);
2074
+ border-left: 3px solid var(--green);
2075
+ padding: 12px 16px;
2076
+ border-radius: 6px;
2077
+ font-size: 14px;
2078
+ opacity: 0;
2079
+ transform: translateY(10px);
2080
+ transition: all 0.3s;
2081
+ z-index: 100;
2082
+ }
2083
+ .notification.show { opacity: 1; transform: translateY(0); }
2084
+ .notification.error { border-left-color: var(--red); }
2085
+ </style>
2086
+ </head>
2087
+ <body>
2088
+ <header class="header">
2089
+ <a href="/" class="back-btn">← Dashboard</a>
2090
+ <h1 class="title">${escapeHtml(columnName)} <span>/ ACTION.md</span></h1>
2091
+ <div class="lang-selector">
2092
+ <button class="lang-btn ${lang === 'en' ? 'active' : ''}" data-lang="en">EN</button>
2093
+ <button class="lang-btn ${lang === 'fr' ? 'active' : ''}" data-lang="fr">FR</button>
2094
+ </div>
2095
+ <div class="actions">
2096
+ <button class="btn btn-save" id="saveBtn" disabled>Save</button>
2097
+ </div>
2098
+ </header>
2099
+ <div class="editor-container">
2100
+ <div class="status-bar">
2101
+ <span id="status">Loading...</span>
2102
+ <span id="path">${slug}/ACTION.${lang}.md</span>
2103
+ </div>
2104
+ <textarea class="editor" id="editor" placeholder="Loading..."></textarea>
2105
+ </div>
2106
+ <div class="notification" id="notification"></div>
2107
+
2108
+ <script>
2109
+ const slug = '${slug}';
2110
+ let currentLang = '${lang}';
2111
+ let originalContent = '';
2112
+ let hasChanges = false;
2113
+
2114
+ const editor = document.getElementById('editor');
2115
+ const saveBtn = document.getElementById('saveBtn');
2116
+ const status = document.getElementById('status');
2117
+ const pathEl = document.getElementById('path');
2118
+ const notification = document.getElementById('notification');
2119
+
2120
+ // Load content
2121
+ async function loadContent() {
2122
+ try {
2123
+ status.textContent = 'Loading...';
2124
+ status.className = '';
2125
+ const res = await fetch('/api/columns/' + slug + '/actions?lang=' + currentLang);
2126
+ const data = await res.json();
2127
+ if (data.success) {
2128
+ originalContent = data.data.content || '';
2129
+ editor.value = originalContent;
2130
+ pathEl.textContent = slug + '/ACTION.' + currentLang + '.md';
2131
+ checkChanges();
2132
+ status.textContent = 'Ready';
2133
+ } else {
2134
+ status.textContent = 'Error: ' + (data.error || 'Failed to load');
2135
+ }
2136
+ } catch (e) {
2137
+ status.textContent = 'Error: ' + e.message;
2138
+ }
2139
+ }
2140
+
2141
+ // Save content
2142
+ async function saveContent() {
2143
+ if (!hasChanges) return;
2144
+ try {
2145
+ saveBtn.disabled = true;
2146
+ saveBtn.textContent = 'Saving...';
2147
+ const res = await fetch('/api/columns/' + slug + '/actions?lang=' + currentLang, {
2148
+ method: 'POST',
2149
+ headers: { 'Content-Type': 'application/json' },
2150
+ body: JSON.stringify({ content: editor.value })
2151
+ });
2152
+ const data = await res.json();
2153
+ if (data.success) {
2154
+ originalContent = editor.value;
2155
+ hasChanges = false;
2156
+ checkChanges();
2157
+ showNotification('Saved successfully!', false);
2158
+ } else {
2159
+ showNotification('Error: ' + (data.error || 'Failed to save'), true);
2160
+ }
2161
+ } catch (e) {
2162
+ showNotification('Error: ' + e.message, true);
2163
+ } finally {
2164
+ saveBtn.textContent = 'Save';
2165
+ }
2166
+ }
2167
+
2168
+ // Check for changes
2169
+ function checkChanges() {
2170
+ hasChanges = editor.value !== originalContent;
2171
+ saveBtn.disabled = !hasChanges;
2172
+ if (hasChanges) {
2173
+ status.textContent = 'Modified (unsaved)';
2174
+ status.className = 'modified';
2175
+ } else {
2176
+ status.textContent = 'Saved';
2177
+ status.className = 'saved';
2178
+ }
2179
+ }
2180
+
2181
+ // Show notification
2182
+ function showNotification(msg, isError) {
2183
+ notification.textContent = msg;
2184
+ notification.className = 'notification show' + (isError ? ' error' : '');
2185
+ setTimeout(() => notification.className = 'notification', 3000);
2186
+ }
2187
+
2188
+ // Event listeners
2189
+ editor.addEventListener('input', checkChanges);
2190
+ saveBtn.addEventListener('click', saveContent);
2191
+
2192
+ // Ctrl+S to save
2193
+ document.addEventListener('keydown', e => {
2194
+ if ((e.ctrlKey || e.metaKey) && e.key === 's') {
2195
+ e.preventDefault();
2196
+ if (hasChanges) saveContent();
2197
+ }
2198
+ });
2199
+
2200
+ // Language switcher
2201
+ document.querySelectorAll('.lang-btn').forEach(btn => {
2202
+ btn.addEventListener('click', () => {
2203
+ const newLang = btn.dataset.lang;
2204
+ if (newLang !== currentLang) {
2205
+ if (hasChanges && !confirm('You have unsaved changes. Switch language anyway?')) {
2206
+ return;
2207
+ }
2208
+ currentLang = newLang;
2209
+ document.querySelectorAll('.lang-btn').forEach(b => b.classList.remove('active'));
2210
+ btn.classList.add('active');
2211
+ loadContent();
2212
+ }
2213
+ });
2214
+ });
2215
+
2216
+ // Warn before leaving with unsaved changes
2217
+ window.addEventListener('beforeunload', e => {
2218
+ if (hasChanges) {
2219
+ e.preventDefault();
2220
+ e.returnValue = '';
2221
+ }
2222
+ });
2223
+
2224
+ // Init
2225
+ loadContent();
2226
+ </script>
2227
+ </body>
2228
+ </html>`;
2229
+ }
1941
2230
  //# sourceMappingURL=dashboard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/server/dashboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/server/dashboard.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAE5C,yCAAyC;IACzC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAErD,OAAO;;;;;;;MAOH,SAAS,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4CAuJ2B,SAAS;;;;sBAI/B,WAAW;sBACX,WAAW;MAC3B,SAAS,EAAE;;;QAGT,CAAC;AACT,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI;SACR,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,SAAS,SAAS;IAChB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0rBN,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,SAAS;IAChB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0gCN,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAY,EAAE,IAAY;IAC/D,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC;IAExC,OAAO;cACK,IAAI;;;;iBAID,UAAU,CAAC,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAuIf,UAAU,CAAC,UAAU,CAAC;;gCAEd,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;gCAC7B,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;;;;;;;;;wBASrC,IAAI,WAAW,IAAI;;;;;;;oBAOvB,IAAI;yBACC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAsHrB,CAAC;AACT,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuF7D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkG7D"}
@@ -2,7 +2,7 @@
2
2
  * HTTP Server
3
3
  */
4
4
  import { createServer } from 'node:http';
5
- import { generateDashboard } from './dashboard.js';
5
+ import { generateDashboard, generateColumnEditPage } from './dashboard.js';
6
6
  import { handleApiRequest } from './api.js';
7
7
  import { handleWebSocketUpgrade, setupPingInterval, getClientCount } from './websocket.js';
8
8
  import { startWatcher, stopWatcher } from './watcher.js';
@@ -28,6 +28,16 @@ export async function startServer(port) {
28
28
  res.end(html);
29
29
  return;
30
30
  }
31
+ // Handle column edit page
32
+ const columnEditMatch = url.match(/^\/column\/([^/]+)\/edit$/);
33
+ if (columnEditMatch) {
34
+ const config = getConfig();
35
+ const slug = columnEditMatch[1];
36
+ const html = generateColumnEditPage(slug, config.lang);
37
+ res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
38
+ res.end(html);
39
+ return;
40
+ }
31
41
  // Health check
32
42
  if (url === '/health') {
33
43
  res.writeHead(200, { 'Content-Type': 'application/json' });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autocode-cli/autocode",
3
- "version": "0.0.35",
3
+ "version": "0.0.37",
4
4
  "description": "Filesystem-based ticket system with web dashboard",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",