@autocode-cli/autocode 0.1.21 → 0.1.23
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/dist/cli/commands/pipeline.d.ts +9 -0
- package/dist/cli/commands/pipeline.d.ts.map +1 -0
- package/dist/cli/commands/pipeline.js +68 -0
- package/dist/cli/commands/pipeline.js.map +1 -0
- package/dist/cli/commands/pipeline.test.d.ts +5 -0
- package/dist/cli/commands/pipeline.test.d.ts.map +1 -0
- package/dist/cli/commands/pipeline.test.js +171 -0
- package/dist/cli/commands/pipeline.test.js.map +1 -0
- package/dist/cli/commands/serve.d.ts.map +1 -1
- package/dist/cli/commands/serve.js +68 -15
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/parser.d.ts.map +1 -1
- package/dist/cli/parser.js +2 -0
- package/dist/cli/parser.js.map +1 -1
- package/dist/core/catalog.d.ts +1 -1
- package/dist/core/catalog.d.ts.map +1 -1
- package/dist/core/catalog.js +2 -1
- package/dist/core/catalog.js.map +1 -1
- package/dist/types/index.d.ts +18 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +4 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/prompt.d.ts +13 -0
- package/dist/utils/prompt.d.ts.map +1 -0
- package/dist/utils/prompt.js +59 -0
- package/dist/utils/prompt.js.map +1 -0
- package/dist/utils/tunnel.d.ts +51 -0
- package/dist/utils/tunnel.d.ts.map +1 -0
- package/dist/utils/tunnel.js +224 -0
- package/dist/utils/tunnel.js.map +1 -0
- package/package.json +1 -1
- package/templates/prompts/splitter.en.md +1 -1
- package/templates/prompts/splitter.fr.md +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/pipeline.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAsEzC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pipeline command - Pipeline and catalog management
|
|
3
|
+
*/
|
|
4
|
+
import { Command } from 'commander';
|
|
5
|
+
import { getAllCatalogColumns, getSegmentDescription } from '../../core/catalog.js';
|
|
6
|
+
import { logger } from '../../utils/logger.js';
|
|
7
|
+
import { PIPELINE_SEGMENTS } from '../../types/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Create the pipeline command with subcommands
|
|
10
|
+
*/
|
|
11
|
+
export function pipelineCommand() {
|
|
12
|
+
const cmd = new Command('pipeline');
|
|
13
|
+
cmd.description('Pipeline and catalog management');
|
|
14
|
+
// Add catalog subcommand group
|
|
15
|
+
const catalogCmd = new Command('catalog');
|
|
16
|
+
catalogCmd.description('Catalog operations');
|
|
17
|
+
// catalog list subcommand
|
|
18
|
+
catalogCmd
|
|
19
|
+
.command('list')
|
|
20
|
+
.description('List all available columns in the catalog')
|
|
21
|
+
.option('--json', 'Output as JSON')
|
|
22
|
+
.option('-s, --segment <segment>', 'Filter by segment (definition, action, finish)')
|
|
23
|
+
.action((options) => {
|
|
24
|
+
const allColumns = getAllCatalogColumns();
|
|
25
|
+
// Filter by segment if specified
|
|
26
|
+
let filteredColumns = allColumns;
|
|
27
|
+
if (options.segment) {
|
|
28
|
+
const segment = options.segment.toLowerCase();
|
|
29
|
+
if (!PIPELINE_SEGMENTS.includes(segment)) {
|
|
30
|
+
logger.error(`Invalid segment '${options.segment}'. Valid: ${PIPELINE_SEGMENTS.join(', ')}`);
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
filteredColumns = allColumns.filter(s => s.segment === segment);
|
|
34
|
+
}
|
|
35
|
+
// JSON output
|
|
36
|
+
if (options.json) {
|
|
37
|
+
const output = filteredColumns.flatMap(s => s.columns.map(c => ({
|
|
38
|
+
slug: c.slug,
|
|
39
|
+
name: c.name,
|
|
40
|
+
description: c.description,
|
|
41
|
+
segment: s.segment,
|
|
42
|
+
})));
|
|
43
|
+
console.log(JSON.stringify(output, null, 2));
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
// Table output
|
|
47
|
+
let totalCount = 0;
|
|
48
|
+
for (const segmentData of filteredColumns) {
|
|
49
|
+
const segmentDescription = getSegmentDescription(segmentData.segment);
|
|
50
|
+
logger.blank();
|
|
51
|
+
console.log(logger.bold(`${segmentData.segment.toUpperCase()}`));
|
|
52
|
+
console.log(logger.dim(segmentDescription));
|
|
53
|
+
logger.separator();
|
|
54
|
+
for (const column of segmentData.columns) {
|
|
55
|
+
const slug = logger.cyan(column.slug.padEnd(25));
|
|
56
|
+
const name = column.name.padEnd(30);
|
|
57
|
+
const desc = column.description.substring(0, 40) + (column.description.length > 40 ? '...' : '');
|
|
58
|
+
console.log(` ${slug} ${name} ${logger.dim(desc)}`);
|
|
59
|
+
totalCount++;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
logger.blank();
|
|
63
|
+
logger.info(`Total: ${totalCount} column(s) available`);
|
|
64
|
+
});
|
|
65
|
+
cmd.addCommand(catalogCmd);
|
|
66
|
+
return cmd;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../../src/cli/commands/pipeline.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAwB,MAAM,sBAAsB,CAAC;AAE/E;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAEpC,GAAG,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAC;IAEnD,+BAA+B;IAC/B,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1C,UAAU,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;IAE7C,0BAA0B;IAC1B,UAAU;SACP,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,yBAAyB,EAAE,gDAAgD,CAAC;SACnF,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;QAClB,MAAM,UAAU,GAAG,oBAAoB,EAAE,CAAC;QAE1C,iCAAiC;QACjC,IAAI,eAAe,GAAG,UAAU,CAAC;QACjC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAqB,CAAC;YACjE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzC,MAAM,CAAC,KAAK,CAAC,oBAAoB,OAAO,CAAC,OAAO,aAAa,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC7F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;QAClE,CAAC;QAED,cAAc;QACd,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CACzC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAClB,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC,CAAC,CACJ,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QAED,eAAe;QACf,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,KAAK,MAAM,WAAW,IAAI,eAAe,EAAE,CAAC;YAC1C,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAEtE,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,SAAS,EAAE,CAAC;YAEnB,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;gBACzC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACpC,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACjG,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACrD,UAAU,EAAE,CAAC;YACf,CAAC;QACH,CAAC;QAED,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,UAAU,UAAU,sBAAsB,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEL,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAE3B,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.test.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/pipeline.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for the pipeline catalog list command
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
5
|
+
// Mock the catalog functions
|
|
6
|
+
vi.mock('../../core/catalog.js', () => ({
|
|
7
|
+
getAllCatalogColumns: vi.fn(),
|
|
8
|
+
getSegmentDescription: vi.fn(),
|
|
9
|
+
}));
|
|
10
|
+
import { getAllCatalogColumns, getSegmentDescription } from '../../core/catalog.js';
|
|
11
|
+
import { PIPELINE_SEGMENTS } from '../../types/index.js';
|
|
12
|
+
// Sample test data
|
|
13
|
+
const mockCatalogData = [
|
|
14
|
+
{
|
|
15
|
+
segment: 'definition',
|
|
16
|
+
columns: [
|
|
17
|
+
{ slug: 'backlog', name: 'Backlog', description: 'Initial storage' },
|
|
18
|
+
{ slug: 'qualification', name: 'Qualification', description: 'Issue analysis' },
|
|
19
|
+
],
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
segment: 'action',
|
|
23
|
+
columns: [
|
|
24
|
+
{ slug: 'dev', name: 'Development', description: 'Code implementation' },
|
|
25
|
+
{ slug: 'review-code', name: 'Code Review', description: 'Peer review' },
|
|
26
|
+
],
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
segment: 'finish',
|
|
30
|
+
columns: [
|
|
31
|
+
{ slug: 'done', name: 'Done', description: 'Completed issues' },
|
|
32
|
+
],
|
|
33
|
+
},
|
|
34
|
+
];
|
|
35
|
+
const mockSegmentDescriptions = {
|
|
36
|
+
definition: 'Columns for issue qualification',
|
|
37
|
+
action: 'Columns for implementation',
|
|
38
|
+
finish: 'Columns for completion',
|
|
39
|
+
};
|
|
40
|
+
describe('pipeline catalog list', () => {
|
|
41
|
+
beforeEach(() => {
|
|
42
|
+
vi.clearAllMocks();
|
|
43
|
+
getAllCatalogColumns.mockReturnValue(mockCatalogData);
|
|
44
|
+
getSegmentDescription.mockImplementation((segment) => mockSegmentDescriptions[segment] || '');
|
|
45
|
+
});
|
|
46
|
+
describe('PIPELINE_SEGMENTS constant', () => {
|
|
47
|
+
it('should contain exactly three segments', () => {
|
|
48
|
+
expect(PIPELINE_SEGMENTS).toHaveLength(3);
|
|
49
|
+
});
|
|
50
|
+
it('should contain definition, action, and finish', () => {
|
|
51
|
+
expect(PIPELINE_SEGMENTS).toContain('definition');
|
|
52
|
+
expect(PIPELINE_SEGMENTS).toContain('action');
|
|
53
|
+
expect(PIPELINE_SEGMENTS).toContain('finish');
|
|
54
|
+
});
|
|
55
|
+
it('should be readonly', () => {
|
|
56
|
+
expect(Object.isFrozen(PIPELINE_SEGMENTS)).toBe(false); // as const makes it readonly but not frozen
|
|
57
|
+
// TypeScript ensures immutability at compile time
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
describe('getAllCatalogColumns', () => {
|
|
61
|
+
it('should return all segments with columns', () => {
|
|
62
|
+
const result = getAllCatalogColumns();
|
|
63
|
+
expect(result).toHaveLength(3);
|
|
64
|
+
expect(result[0].segment).toBe('definition');
|
|
65
|
+
expect(result[1].segment).toBe('action');
|
|
66
|
+
expect(result[2].segment).toBe('finish');
|
|
67
|
+
});
|
|
68
|
+
it('should return columns for each segment', () => {
|
|
69
|
+
const result = getAllCatalogColumns();
|
|
70
|
+
expect(result[0].columns).toHaveLength(2);
|
|
71
|
+
expect(result[1].columns).toHaveLength(2);
|
|
72
|
+
expect(result[2].columns).toHaveLength(1);
|
|
73
|
+
});
|
|
74
|
+
it('should return columns with slug, name, and description', () => {
|
|
75
|
+
const result = getAllCatalogColumns();
|
|
76
|
+
const firstColumn = result[0].columns[0];
|
|
77
|
+
expect(firstColumn).toHaveProperty('slug');
|
|
78
|
+
expect(firstColumn).toHaveProperty('name');
|
|
79
|
+
expect(firstColumn).toHaveProperty('description');
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
describe('segment filtering', () => {
|
|
83
|
+
it('should filter by definition segment', () => {
|
|
84
|
+
const allColumns = getAllCatalogColumns();
|
|
85
|
+
const filtered = allColumns.filter(s => s.segment === 'definition');
|
|
86
|
+
expect(filtered).toHaveLength(1);
|
|
87
|
+
expect(filtered[0].segment).toBe('definition');
|
|
88
|
+
expect(filtered[0].columns).toHaveLength(2);
|
|
89
|
+
});
|
|
90
|
+
it('should filter by action segment', () => {
|
|
91
|
+
const allColumns = getAllCatalogColumns();
|
|
92
|
+
const filtered = allColumns.filter(s => s.segment === 'action');
|
|
93
|
+
expect(filtered).toHaveLength(1);
|
|
94
|
+
expect(filtered[0].segment).toBe('action');
|
|
95
|
+
expect(filtered[0].columns).toHaveLength(2);
|
|
96
|
+
});
|
|
97
|
+
it('should filter by finish segment', () => {
|
|
98
|
+
const allColumns = getAllCatalogColumns();
|
|
99
|
+
const filtered = allColumns.filter(s => s.segment === 'finish');
|
|
100
|
+
expect(filtered).toHaveLength(1);
|
|
101
|
+
expect(filtered[0].segment).toBe('finish');
|
|
102
|
+
expect(filtered[0].columns).toHaveLength(1);
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
describe('JSON output format', () => {
|
|
106
|
+
it('should flatten columns with segment info for JSON output', () => {
|
|
107
|
+
const allColumns = getAllCatalogColumns();
|
|
108
|
+
const output = allColumns.flatMap(s => s.columns.map(c => ({
|
|
109
|
+
slug: c.slug,
|
|
110
|
+
name: c.name,
|
|
111
|
+
description: c.description,
|
|
112
|
+
segment: s.segment,
|
|
113
|
+
})));
|
|
114
|
+
expect(output).toHaveLength(5); // 2 + 2 + 1
|
|
115
|
+
expect(output[0]).toEqual({
|
|
116
|
+
slug: 'backlog',
|
|
117
|
+
name: 'Backlog',
|
|
118
|
+
description: 'Initial storage',
|
|
119
|
+
segment: 'definition',
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
it('should include segment in each JSON item', () => {
|
|
123
|
+
const allColumns = getAllCatalogColumns();
|
|
124
|
+
const output = allColumns.flatMap(s => s.columns.map(c => ({
|
|
125
|
+
slug: c.slug,
|
|
126
|
+
name: c.name,
|
|
127
|
+
description: c.description,
|
|
128
|
+
segment: s.segment,
|
|
129
|
+
})));
|
|
130
|
+
output.forEach(item => {
|
|
131
|
+
expect(item).toHaveProperty('segment');
|
|
132
|
+
expect(PIPELINE_SEGMENTS).toContain(item.segment);
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
describe('segment validation', () => {
|
|
137
|
+
it('should validate segment against PIPELINE_SEGMENTS', () => {
|
|
138
|
+
const validSegments = ['definition', 'action', 'finish'];
|
|
139
|
+
validSegments.forEach(segment => {
|
|
140
|
+
expect(PIPELINE_SEGMENTS.includes(segment)).toBe(true);
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
it('should reject invalid segment', () => {
|
|
144
|
+
const invalidSegments = ['invalid', 'testing', 'review', ''];
|
|
145
|
+
invalidSegments.forEach(segment => {
|
|
146
|
+
expect(PIPELINE_SEGMENTS.includes(segment)).toBe(false);
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
describe('getSegmentDescription', () => {
|
|
151
|
+
it('should return description for each segment', () => {
|
|
152
|
+
expect(getSegmentDescription('definition')).toBe('Columns for issue qualification');
|
|
153
|
+
expect(getSegmentDescription('action')).toBe('Columns for implementation');
|
|
154
|
+
expect(getSegmentDescription('finish')).toBe('Columns for completion');
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
describe('column count', () => {
|
|
158
|
+
it('should count total columns correctly', () => {
|
|
159
|
+
const allColumns = getAllCatalogColumns();
|
|
160
|
+
const totalCount = allColumns.reduce((sum, s) => sum + s.columns.length, 0);
|
|
161
|
+
expect(totalCount).toBe(5);
|
|
162
|
+
});
|
|
163
|
+
it('should count filtered columns correctly', () => {
|
|
164
|
+
const allColumns = getAllCatalogColumns();
|
|
165
|
+
const actionColumns = allColumns.filter(s => s.segment === 'action');
|
|
166
|
+
const count = actionColumns.reduce((sum, s) => sum + s.columns.length, 0);
|
|
167
|
+
expect(count).toBe(2);
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
//# sourceMappingURL=pipeline.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.test.js","sourceRoot":"","sources":["../../../src/cli/commands/pipeline.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/serve.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/serve.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6CpC;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAkLtC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* serve command - Start web dashboard server
|
|
3
3
|
*/
|
|
4
4
|
import { Command } from 'commander';
|
|
5
|
-
import { execSync
|
|
5
|
+
import { execSync } from 'node:child_process';
|
|
6
6
|
import { getConfig, DEFAULT_PORT } from '../../utils/config.js';
|
|
7
7
|
import { ensureColumnStructure, copyActionTemplates } from '../../core/column.js';
|
|
8
8
|
import { ensureDir, pathExists, writeFileSafe } from '../../utils/fs.js';
|
|
@@ -11,6 +11,8 @@ import { logger } from '../../utils/logger.js';
|
|
|
11
11
|
import { pipelineExists } from '../../core/pipeline.js';
|
|
12
12
|
import { hasTransitionIssues, getTransitionIssues, applySync, previewSync } from '../../core/sync.js';
|
|
13
13
|
import { setTunnelUrl } from '../../server/websocket.js';
|
|
14
|
+
import { isCloudflaredInstalled, isCloudflaredLoggedIn, loadTunnelConfig, saveTunnelConfig, getTunnelInfo, createTunnel, routeTunnelDns, generateCloudflaredConfig, runTunnel, } from '../../utils/tunnel.js';
|
|
15
|
+
import { promptTunnelConfig } from '../../utils/prompt.js';
|
|
14
16
|
/**
|
|
15
17
|
* Kill any process using the specified port
|
|
16
18
|
*/
|
|
@@ -42,7 +44,7 @@ export function serveCommand() {
|
|
|
42
44
|
cmd
|
|
43
45
|
.description('Start the web dashboard server')
|
|
44
46
|
.option('-p, --port <port>', 'Server port', String(DEFAULT_PORT))
|
|
45
|
-
.option('-e, --expose', 'Expose dashboard via Cloudflare
|
|
47
|
+
.option('-e, --expose', 'Expose dashboard via Cloudflare named tunnel')
|
|
46
48
|
.action(async (options) => {
|
|
47
49
|
const port = parseInt(options.port, 10) || DEFAULT_PORT;
|
|
48
50
|
const config = getConfig();
|
|
@@ -99,27 +101,78 @@ export function serveCommand() {
|
|
|
99
101
|
try {
|
|
100
102
|
const { startServer } = await import('../../server/index.js');
|
|
101
103
|
await startServer(port);
|
|
102
|
-
// Start Cloudflare tunnel if --expose option is set
|
|
104
|
+
// Start Cloudflare named tunnel if --expose option is set
|
|
103
105
|
if (options.expose) {
|
|
104
|
-
// Check if cloudflared is installed
|
|
105
|
-
|
|
106
|
-
execSync('which cloudflared', { stdio: 'ignore' });
|
|
107
|
-
}
|
|
108
|
-
catch {
|
|
106
|
+
// Step 1: Check if cloudflared is installed
|
|
107
|
+
if (!isCloudflaredInstalled()) {
|
|
109
108
|
logger.error('cloudflared is not installed');
|
|
110
109
|
logger.info('Install: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/');
|
|
111
110
|
process.exit(1);
|
|
112
111
|
}
|
|
112
|
+
// Step 2: Check if user is logged in to Cloudflare
|
|
113
|
+
if (!isCloudflaredLoggedIn()) {
|
|
114
|
+
logger.error('You must be logged in to Cloudflare');
|
|
115
|
+
logger.info('Run: cloudflared tunnel login');
|
|
116
|
+
logger.info('Then retry: autocode serve --expose');
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
119
|
+
// Step 3: Load or create tunnel config
|
|
120
|
+
let tunnelConfig = loadTunnelConfig(config.root);
|
|
121
|
+
if (!tunnelConfig) {
|
|
122
|
+
logger.info('No tunnel configuration found. Setting up...');
|
|
123
|
+
tunnelConfig = await promptTunnelConfig();
|
|
124
|
+
saveTunnelConfig(config.root, tunnelConfig);
|
|
125
|
+
logger.success('Tunnel configuration saved to .autocode/config.yml');
|
|
126
|
+
}
|
|
127
|
+
// Step 4: Ensure tunnel exists
|
|
128
|
+
let tunnelInfo = getTunnelInfo(tunnelConfig.name);
|
|
129
|
+
if (!tunnelInfo) {
|
|
130
|
+
logger.info(`Creating tunnel "${tunnelConfig.name}"...`);
|
|
131
|
+
const createResult = createTunnel(tunnelConfig.name);
|
|
132
|
+
if (!createResult.success) {
|
|
133
|
+
logger.error(`Failed to create tunnel: ${createResult.error}`);
|
|
134
|
+
process.exit(1);
|
|
135
|
+
}
|
|
136
|
+
tunnelInfo = { id: createResult.id, name: tunnelConfig.name };
|
|
137
|
+
logger.success(`Tunnel "${tunnelConfig.name}" created`);
|
|
138
|
+
}
|
|
139
|
+
// Step 5: Configure DNS route
|
|
140
|
+
logger.info(`Configuring DNS route for ${tunnelConfig.hostname}...`);
|
|
141
|
+
const routeResult = routeTunnelDns(tunnelConfig.name, tunnelConfig.hostname);
|
|
142
|
+
if (!routeResult.success && !routeResult.alreadyExists) {
|
|
143
|
+
logger.error(`Failed to configure DNS: ${routeResult.error}`);
|
|
144
|
+
process.exit(1);
|
|
145
|
+
}
|
|
146
|
+
if (routeResult.alreadyExists) {
|
|
147
|
+
logger.info(`DNS route for ${tunnelConfig.hostname} already configured`);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
logger.success(`DNS route configured: ${tunnelConfig.hostname}`);
|
|
151
|
+
}
|
|
152
|
+
// Step 6: Generate cloudflared config and run tunnel
|
|
153
|
+
let cloudflaredConfigPath;
|
|
154
|
+
try {
|
|
155
|
+
cloudflaredConfigPath = generateCloudflaredConfig(config.root, tunnelInfo.id, tunnelConfig.hostname, port);
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
logger.error(`Failed to generate tunnel config: ${error}`);
|
|
159
|
+
process.exit(1);
|
|
160
|
+
}
|
|
113
161
|
logger.info('Starting Cloudflare tunnel...');
|
|
114
|
-
const tunnel =
|
|
115
|
-
tunnel
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
162
|
+
const tunnel = runTunnel(cloudflaredConfigPath, tunnelConfig.name);
|
|
163
|
+
// Monitor tunnel stderr for connection status
|
|
164
|
+
tunnel.stderr?.on('data', (data) => {
|
|
165
|
+
const output = data.toString();
|
|
166
|
+
// Log connection events
|
|
167
|
+
if (output.includes('Registered tunnel connection')) {
|
|
168
|
+
logger.info('Tunnel connected');
|
|
121
169
|
}
|
|
122
170
|
});
|
|
171
|
+
// Step 7: Broadcast the persistent URL
|
|
172
|
+
const url = `https://${tunnelConfig.hostname}`;
|
|
173
|
+
logger.success(`Dashboard exposed at: ${url}`);
|
|
174
|
+
setTunnelUrl(url);
|
|
175
|
+
// Cleanup on exit
|
|
123
176
|
const cleanup = () => {
|
|
124
177
|
tunnel.kill();
|
|
125
178
|
process.exit(0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/cli/commands/serve.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/cli/commands/serve.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/parser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/cli/parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/cli/parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAoCvC;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIzE"}
|
package/dist/cli/parser.js
CHANGED
|
@@ -13,6 +13,7 @@ import { serveCommand } from './commands/serve.js';
|
|
|
13
13
|
import { syncCommand } from './commands/sync.js';
|
|
14
14
|
import { statsCommand } from './commands/stats.js';
|
|
15
15
|
import { parentCommand } from './commands/parent.js';
|
|
16
|
+
import { pipelineCommand } from './commands/pipeline.js';
|
|
16
17
|
import { getCurrentVersion, checkAndNotify } from '../utils/version-check.js';
|
|
17
18
|
/**
|
|
18
19
|
* Create and configure the CLI program
|
|
@@ -35,6 +36,7 @@ export function createProgram() {
|
|
|
35
36
|
program.addCommand(syncCommand());
|
|
36
37
|
program.addCommand(statsCommand());
|
|
37
38
|
program.addCommand(parentCommand());
|
|
39
|
+
program.addCommand(pipelineCommand());
|
|
38
40
|
// Shortcut: autocode AC-000001 => show
|
|
39
41
|
program
|
|
40
42
|
.argument('[key]', 'Issue key to show details')
|
package/dist/cli/parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/cli/parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE9E;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,UAAU,CAAC;SAChB,WAAW,CAAC,mDAAmD,CAAC;SAChE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAEhC,oBAAoB;IACpB,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;IACjC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/cli/parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE9E;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,UAAU,CAAC;SAChB,WAAW,CAAC,mDAAmD,CAAC;SAChE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAEhC,oBAAoB;IACpB,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;IACjC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;IAEtC,uCAAuC;IACvC,OAAO;SACJ,QAAQ,CAAC,OAAO,EAAE,2BAA2B,CAAC;SAC9C,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;QACd,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YACnC,+BAA+B;YAC/B,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;QACnD,CAAC;aAAM,IAAI,GAAG,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,yCAAyC,GAAG,EAAE,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAiB,OAAO,CAAC,IAAI;IACxD,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,cAAc,EAAE,CAAC;AACzB,CAAC"}
|
package/dist/core/catalog.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Catalog management
|
|
3
3
|
* Handles loading and querying the column catalog
|
|
4
4
|
*/
|
|
5
|
-
import type
|
|
5
|
+
import { type Catalog, type CatalogColumn, type PipelineSegment } from '../types/index.js';
|
|
6
6
|
/**
|
|
7
7
|
* Get the path to the catalog file
|
|
8
8
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/core/catalog.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/core/catalog.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAqB,KAAK,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAM9G;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAarC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,eAAe,GAAG,aAAa,EAAE,CAG9E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI;IAAE,OAAO,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,aAAa,EAAE,CAAA;CAAE,EAAE,CAO/F;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAKvF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,eAAe,CAAA;CAAE,GAAG,IAAI,CAY1G;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAGtE;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,CAGrE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAK/E"}
|
package/dist/core/catalog.js
CHANGED
|
@@ -6,6 +6,7 @@ import { join } from 'node:path';
|
|
|
6
6
|
import { readFileSync, existsSync } from 'node:fs';
|
|
7
7
|
import { parse as parseYaml } from 'yaml';
|
|
8
8
|
import { getTemplatesDir } from '../utils/config.js';
|
|
9
|
+
import { PIPELINE_SEGMENTS } from '../types/index.js';
|
|
9
10
|
const CATALOG_FILENAME = 'catalog.yaml';
|
|
10
11
|
let cachedCatalog = null;
|
|
11
12
|
/**
|
|
@@ -61,7 +62,7 @@ export function isValidColumnForSegment(slug, segment) {
|
|
|
61
62
|
export function findCatalogColumn(slug) {
|
|
62
63
|
const baseSlug = slug.replace(/^\d{2}_/, '');
|
|
63
64
|
const catalog = loadCatalog();
|
|
64
|
-
for (const segment of
|
|
65
|
+
for (const segment of PIPELINE_SEGMENTS) {
|
|
65
66
|
const column = catalog.segments[segment].columns.find(c => c.slug === baseSlug);
|
|
66
67
|
if (column) {
|
|
67
68
|
return { column, segment };
|
package/dist/core/catalog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/core/catalog.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/core/catalog.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -84,6 +84,10 @@ export interface WorkflowValidation {
|
|
|
84
84
|
* Pipeline segment type
|
|
85
85
|
*/
|
|
86
86
|
export type PipelineSegment = 'definition' | 'action' | 'finish';
|
|
87
|
+
/**
|
|
88
|
+
* Pipeline segments array (for iteration and validation)
|
|
89
|
+
*/
|
|
90
|
+
export declare const PIPELINE_SEGMENTS: readonly PipelineSegment[];
|
|
87
91
|
/**
|
|
88
92
|
* Column in the catalog
|
|
89
93
|
*/
|
|
@@ -196,4 +200,18 @@ export interface ProjectContext {
|
|
|
196
200
|
configFiles: string[];
|
|
197
201
|
projectDescription: string;
|
|
198
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* Tunnel configuration for Cloudflare named tunnels
|
|
205
|
+
*/
|
|
206
|
+
export interface TunnelConfig {
|
|
207
|
+
name: string;
|
|
208
|
+
hostname: string;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Tunnel info from cloudflared
|
|
212
|
+
*/
|
|
213
|
+
export interface TunnelInfo {
|
|
214
|
+
id: string;
|
|
215
|
+
name: string;
|
|
216
|
+
}
|
|
199
217
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.js
CHANGED
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkGH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA+B,CAAC,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive prompt utilities for CLI
|
|
3
|
+
*/
|
|
4
|
+
import type { TunnelConfig } from '../types/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Prompt user for input with optional validation
|
|
7
|
+
*/
|
|
8
|
+
export declare function promptInput(message: string, validate?: (input: string) => string | true): Promise<string>;
|
|
9
|
+
/**
|
|
10
|
+
* Prompt for tunnel configuration (name and hostname)
|
|
11
|
+
*/
|
|
12
|
+
export declare function promptTunnelConfig(): Promise<TunnelConfig>;
|
|
13
|
+
//# sourceMappingURL=prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/utils/prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD;;GAEG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GAC1C,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,YAAY,CAAC,CA+BhE"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive prompt utilities for CLI
|
|
3
|
+
*/
|
|
4
|
+
import { createInterface } from 'node:readline';
|
|
5
|
+
/**
|
|
6
|
+
* Prompt user for input with optional validation
|
|
7
|
+
*/
|
|
8
|
+
export function promptInput(message, validate) {
|
|
9
|
+
return new Promise((resolve) => {
|
|
10
|
+
const rl = createInterface({
|
|
11
|
+
input: process.stdin,
|
|
12
|
+
output: process.stdout,
|
|
13
|
+
});
|
|
14
|
+
const ask = () => {
|
|
15
|
+
rl.question(message, (answer) => {
|
|
16
|
+
const trimmed = answer.trim();
|
|
17
|
+
if (validate) {
|
|
18
|
+
const result = validate(trimmed);
|
|
19
|
+
if (result !== true) {
|
|
20
|
+
console.log(` ⚠ ${result}`);
|
|
21
|
+
ask(); // Re-ask
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
rl.close();
|
|
26
|
+
resolve(trimmed);
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
ask();
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Prompt for tunnel configuration (name and hostname)
|
|
34
|
+
*/
|
|
35
|
+
export async function promptTunnelConfig() {
|
|
36
|
+
console.log('');
|
|
37
|
+
console.log('Configuration du tunnel Cloudflare');
|
|
38
|
+
console.log('───────────────────────────────────');
|
|
39
|
+
console.log('');
|
|
40
|
+
const name = await promptInput('Nom du tunnel (ex: mon-projet): ', (input) => {
|
|
41
|
+
if (!input)
|
|
42
|
+
return 'Le nom du tunnel est requis';
|
|
43
|
+
if (!/^[a-z0-9-]+$/.test(input)) {
|
|
44
|
+
return 'Le nom doit contenir uniquement des lettres minuscules, chiffres et tirets';
|
|
45
|
+
}
|
|
46
|
+
return true;
|
|
47
|
+
});
|
|
48
|
+
const hostname = await promptInput('Hostname complet (ex: dev.mondomaine.com): ', (input) => {
|
|
49
|
+
if (!input)
|
|
50
|
+
return 'Le hostname est requis';
|
|
51
|
+
if (!/^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/.test(input)) {
|
|
52
|
+
return 'Format invalide (ex: sous-domaine.domaine.com)';
|
|
53
|
+
}
|
|
54
|
+
return true;
|
|
55
|
+
});
|
|
56
|
+
console.log('');
|
|
57
|
+
return { name, hostname };
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/utils/prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD;;GAEG;AACH,MAAM,UAAU,WAAW,CACzB,OAAe,EACf,QAA2C;IAE3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,EAAE,GAAG,eAAe,CAAC;YACzB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,GAAS,EAAE;YACrB,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;gBAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;gBAE9B,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;oBACjC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;wBACpB,OAAO,CAAC,GAAG,CAAC,OAAO,MAAM,EAAE,CAAC,CAAC;wBAC7B,GAAG,EAAE,CAAC,CAAC,SAAS;wBAChB,OAAO;oBACT,CAAC;gBACH,CAAC;gBAED,EAAE,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,OAAO,CAAC,CAAC;YACnB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,GAAG,EAAE,CAAC;IACR,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,IAAI,GAAG,MAAM,WAAW,CAC5B,kCAAkC,EAClC,CAAC,KAAK,EAAE,EAAE;QACR,IAAI,CAAC,KAAK;YAAE,OAAO,6BAA6B,CAAC;QACjD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,4EAA4E,CAAC;QACtF,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CACF,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,WAAW,CAChC,6CAA6C,EAC7C,CAAC,KAAK,EAAE,EAAE;QACR,IAAI,CAAC,KAAK;YAAE,OAAO,wBAAwB,CAAC;QAC5C,IAAI,CAAC,mEAAmE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACrF,OAAO,gDAAgD,CAAC;QAC1D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CACF,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloudflare tunnel management utilities
|
|
3
|
+
*/
|
|
4
|
+
import { type ChildProcess } from 'node:child_process';
|
|
5
|
+
import type { TunnelConfig, TunnelInfo } from '../types/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* Check if cloudflared is installed
|
|
8
|
+
*/
|
|
9
|
+
export declare function isCloudflaredInstalled(): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Check if user is logged in to Cloudflare
|
|
12
|
+
*/
|
|
13
|
+
export declare function isCloudflaredLoggedIn(): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Load tunnel config from .autocode/config.yml
|
|
16
|
+
*/
|
|
17
|
+
export declare function loadTunnelConfig(rootDir: string): TunnelConfig | null;
|
|
18
|
+
/**
|
|
19
|
+
* Save tunnel config to .autocode/config.yml
|
|
20
|
+
*/
|
|
21
|
+
export declare function saveTunnelConfig(rootDir: string, tunnelConfig: TunnelConfig): void;
|
|
22
|
+
/**
|
|
23
|
+
* Get tunnel info by name
|
|
24
|
+
*/
|
|
25
|
+
export declare function getTunnelInfo(name: string): TunnelInfo | null;
|
|
26
|
+
/**
|
|
27
|
+
* Create a new tunnel
|
|
28
|
+
*/
|
|
29
|
+
export declare function createTunnel(name: string): {
|
|
30
|
+
success: boolean;
|
|
31
|
+
error?: string;
|
|
32
|
+
id?: string;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Configure DNS route for tunnel
|
|
36
|
+
*/
|
|
37
|
+
export declare function routeTunnelDns(name: string, hostname: string): {
|
|
38
|
+
success: boolean;
|
|
39
|
+
error?: string;
|
|
40
|
+
alreadyExists?: boolean;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Generate cloudflared config file for running the tunnel
|
|
44
|
+
* Returns the path to the generated config file
|
|
45
|
+
*/
|
|
46
|
+
export declare function generateCloudflaredConfig(rootDir: string, tunnelId: string, hostname: string, localPort: number): string;
|
|
47
|
+
/**
|
|
48
|
+
* Run the tunnel with the given config
|
|
49
|
+
*/
|
|
50
|
+
export declare function runTunnel(configPath: string, tunnelName: string): ChildProcess;
|
|
51
|
+
//# sourceMappingURL=tunnel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tunnel.d.ts","sourceRoot":"","sources":["../../src/utils/tunnel.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKxE,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAElE;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAOhD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAmB/C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAmBrE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAG,IAAI,CA0BlF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAkB7D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CA+B5F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,CAkB/D;AAiCD;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,MAAM,CA6BR;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,CAM9E"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloudflare tunnel management utilities
|
|
3
|
+
*/
|
|
4
|
+
import { execSync, spawn } from 'node:child_process';
|
|
5
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync, readdirSync } from 'node:fs';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { homedir } from 'node:os';
|
|
8
|
+
import { stringify as yamlStringify, parse as yamlParse } from 'yaml';
|
|
9
|
+
/**
|
|
10
|
+
* Check if cloudflared is installed
|
|
11
|
+
*/
|
|
12
|
+
export function isCloudflaredInstalled() {
|
|
13
|
+
try {
|
|
14
|
+
execSync('which cloudflared', { stdio: 'ignore' });
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Check if user is logged in to Cloudflare
|
|
23
|
+
*/
|
|
24
|
+
export function isCloudflaredLoggedIn() {
|
|
25
|
+
try {
|
|
26
|
+
// Try to list tunnels - will fail if not logged in
|
|
27
|
+
execSync('cloudflared tunnel list', { stdio: 'pipe' });
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
// Check if error message contains auth-related text
|
|
32
|
+
const stderr = error?.stderr?.toString() || '';
|
|
33
|
+
if (stderr.includes('login') ||
|
|
34
|
+
stderr.includes('certificate') ||
|
|
35
|
+
stderr.includes('cert.pem') ||
|
|
36
|
+
stderr.includes('You must obtain a certificate')) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
// Other error (e.g., no tunnels) - still logged in
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Load tunnel config from .autocode/config.yml
|
|
45
|
+
*/
|
|
46
|
+
export function loadTunnelConfig(rootDir) {
|
|
47
|
+
const configPath = join(rootDir, '.autocode', 'config.yml');
|
|
48
|
+
if (!existsSync(configPath)) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
try {
|
|
52
|
+
const content = readFileSync(configPath, 'utf-8');
|
|
53
|
+
const config = yamlParse(content);
|
|
54
|
+
if (config?.tunnel?.name && config?.tunnel?.hostname) {
|
|
55
|
+
return config.tunnel;
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Save tunnel config to .autocode/config.yml
|
|
65
|
+
*/
|
|
66
|
+
export function saveTunnelConfig(rootDir, tunnelConfig) {
|
|
67
|
+
const configDir = join(rootDir, '.autocode');
|
|
68
|
+
const configPath = join(configDir, 'config.yml');
|
|
69
|
+
// Ensure directory exists
|
|
70
|
+
if (!existsSync(configDir)) {
|
|
71
|
+
mkdirSync(configDir, { recursive: true });
|
|
72
|
+
}
|
|
73
|
+
// Load existing config or create new
|
|
74
|
+
let config = {};
|
|
75
|
+
if (existsSync(configPath)) {
|
|
76
|
+
try {
|
|
77
|
+
const content = readFileSync(configPath, 'utf-8');
|
|
78
|
+
config = yamlParse(content) || {};
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
config = {};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Update tunnel section
|
|
85
|
+
config.tunnel = tunnelConfig;
|
|
86
|
+
// Write back
|
|
87
|
+
writeFileSync(configPath, yamlStringify(config));
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get tunnel info by name
|
|
91
|
+
*/
|
|
92
|
+
export function getTunnelInfo(name) {
|
|
93
|
+
try {
|
|
94
|
+
const output = execSync('cloudflared tunnel list -o json', {
|
|
95
|
+
encoding: 'utf-8',
|
|
96
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
97
|
+
});
|
|
98
|
+
const tunnels = JSON.parse(output);
|
|
99
|
+
const tunnel = tunnels.find((t) => t.name === name);
|
|
100
|
+
if (tunnel) {
|
|
101
|
+
return { id: tunnel.id, name: tunnel.name };
|
|
102
|
+
}
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Create a new tunnel
|
|
111
|
+
*/
|
|
112
|
+
export function createTunnel(name) {
|
|
113
|
+
try {
|
|
114
|
+
const output = execSync(`cloudflared tunnel create ${name}`, {
|
|
115
|
+
encoding: 'utf-8',
|
|
116
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
117
|
+
});
|
|
118
|
+
// Extract tunnel ID from output
|
|
119
|
+
const match = output.match(/Created tunnel ([a-f0-9-]+)/);
|
|
120
|
+
const id = match ? match[1] : undefined;
|
|
121
|
+
// If no ID from output, try to get it from list
|
|
122
|
+
if (!id) {
|
|
123
|
+
const info = getTunnelInfo(name);
|
|
124
|
+
if (info) {
|
|
125
|
+
return { success: true, id: info.id };
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return { success: true, id };
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
const stderr = error?.stderr?.toString() || '';
|
|
132
|
+
// Tunnel already exists is not an error
|
|
133
|
+
if (stderr.includes('already exists')) {
|
|
134
|
+
const info = getTunnelInfo(name);
|
|
135
|
+
return { success: true, id: info?.id };
|
|
136
|
+
}
|
|
137
|
+
return { success: false, error: stderr || 'Failed to create tunnel' };
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Configure DNS route for tunnel
|
|
142
|
+
*/
|
|
143
|
+
export function routeTunnelDns(name, hostname) {
|
|
144
|
+
try {
|
|
145
|
+
execSync(`cloudflared tunnel route dns ${name} ${hostname}`, {
|
|
146
|
+
encoding: 'utf-8',
|
|
147
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
148
|
+
});
|
|
149
|
+
return { success: true };
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
const stderr = error?.stderr?.toString() || '';
|
|
153
|
+
// DNS record already exists
|
|
154
|
+
if (stderr.includes('already exists') || stderr.includes('already associated')) {
|
|
155
|
+
return { success: true, alreadyExists: true };
|
|
156
|
+
}
|
|
157
|
+
return { success: false, error: stderr || 'Failed to configure DNS route' };
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Find credentials file for a tunnel
|
|
162
|
+
*/
|
|
163
|
+
function findCredentialsFile(tunnelId) {
|
|
164
|
+
const cloudflaredDir = join(homedir(), '.cloudflared');
|
|
165
|
+
if (!existsSync(cloudflaredDir)) {
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
// Look for <tunnelId>.json
|
|
169
|
+
const credFile = join(cloudflaredDir, `${tunnelId}.json`);
|
|
170
|
+
if (existsSync(credFile)) {
|
|
171
|
+
return credFile;
|
|
172
|
+
}
|
|
173
|
+
// Try to find any matching JSON file
|
|
174
|
+
try {
|
|
175
|
+
const files = readdirSync(cloudflaredDir);
|
|
176
|
+
for (const file of files) {
|
|
177
|
+
if (file.endsWith('.json') && file.includes(tunnelId.substring(0, 8))) {
|
|
178
|
+
return join(cloudflaredDir, file);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
// Ignore
|
|
184
|
+
}
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Generate cloudflared config file for running the tunnel
|
|
189
|
+
* Returns the path to the generated config file
|
|
190
|
+
*/
|
|
191
|
+
export function generateCloudflaredConfig(rootDir, tunnelId, hostname, localPort) {
|
|
192
|
+
const configDir = join(rootDir, '.autocode');
|
|
193
|
+
const configPath = join(configDir, 'cloudflared.yml');
|
|
194
|
+
// Find credentials file
|
|
195
|
+
const credentialsFile = findCredentialsFile(tunnelId);
|
|
196
|
+
if (!credentialsFile) {
|
|
197
|
+
throw new Error(`Credentials file not found for tunnel ${tunnelId}`);
|
|
198
|
+
}
|
|
199
|
+
// Ensure directory exists
|
|
200
|
+
if (!existsSync(configDir)) {
|
|
201
|
+
mkdirSync(configDir, { recursive: true });
|
|
202
|
+
}
|
|
203
|
+
// Generate config
|
|
204
|
+
const config = {
|
|
205
|
+
tunnel: tunnelId,
|
|
206
|
+
'credentials-file': credentialsFile,
|
|
207
|
+
ingress: [
|
|
208
|
+
{ hostname, service: `http://localhost:${localPort}` },
|
|
209
|
+
{ service: 'http_status:404' },
|
|
210
|
+
],
|
|
211
|
+
};
|
|
212
|
+
writeFileSync(configPath, yamlStringify(config));
|
|
213
|
+
return configPath;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Run the tunnel with the given config
|
|
217
|
+
*/
|
|
218
|
+
export function runTunnel(configPath, tunnelName) {
|
|
219
|
+
const tunnel = spawn('cloudflared', ['tunnel', '--config', configPath, 'run', tunnelName], {
|
|
220
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
221
|
+
});
|
|
222
|
+
return tunnel;
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=tunnel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../src/utils/tunnel.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -18,7 +18,7 @@ If the task is small enough to be completed in one go, proceed directly without
|
|
|
18
18
|
2. Identify natural boundaries between features, layers, or responsibilities
|
|
19
19
|
3. Define clear acceptance criteria for each sub-issue
|
|
20
20
|
4. Ensure each split issue is independently testable and deployable
|
|
21
|
-
5. Create sub-issues: `autocode new "<title>" "<description>" --priority P2 --labels "<labels>" --acceptance "<criteria>" --semver patch --column backlog
|
|
21
|
+
5. Create sub-issues: `autocode new "<title>" "<description>" --priority P2 --labels "<labels>" --acceptance "<criteria>" --semver patch --column backlog --parent <issue-key>`
|
|
22
22
|
6. Verify no functionality has been forgotten or duplicated across issues
|
|
23
23
|
7. Create an integration issue that references all sub-issues to validate cohesion
|
|
24
24
|
8. Document: `autocode comment <issue-key> "[summary]"`
|
|
@@ -18,7 +18,7 @@ Si la tâche est suffisamment petite pour être complétée en une fois, procéd
|
|
|
18
18
|
2. Identifier les frontières naturelles entre fonctionnalités, couches ou responsabilités
|
|
19
19
|
3. Définir des critères d'acceptation clairs pour chaque sous-ticket
|
|
20
20
|
4. S'assurer que chaque ticket découpé est testable et déployable indépendamment
|
|
21
|
-
5. Créer les sous-tickets : `autocode new "<title>" "<description>" --priority P2 --labels "<labels>" --acceptance "<criteria>" --semver patch --column backlog
|
|
21
|
+
5. Créer les sous-tickets : `autocode new "<title>" "<description>" --priority P2 --labels "<labels>" --acceptance "<criteria>" --semver patch --column backlog --parent <issue-key>`
|
|
22
22
|
6. Vérifier qu'aucune fonctionnalité n'a été oubliée ou dupliquée entre les tickets
|
|
23
23
|
7. Créer un ticket d'intégration qui référence tous les sous-tickets pour valider la cohésion
|
|
24
24
|
8. Documenter : `autocode comment <issue-key> "[résumé]"`
|