forgeo-cli 0.3.0__py3-none-any.whl
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.
- forgeo/__init__.py +10 -0
- forgeo/__main__.py +6 -0
- forgeo/agent.py +332 -0
- forgeo/backlog.py +206 -0
- forgeo/central.py +620 -0
- forgeo/cli.py +759 -0
- forgeo/config.py +36 -0
- forgeo/daemon.py +209 -0
- forgeo/forgeo.py +446 -0
- forgeo/git.py +100 -0
- forgeo/instances.py +187 -0
- forgeo/io.py +30 -0
- forgeo/models.py +252 -0
- forgeo/notify.py +77 -0
- forgeo/runs.py +73 -0
- forgeo/setup.py +185 -0
- forgeo/web/central/central.css +380 -0
- forgeo/web/central/central.js +780 -0
- forgeo/web/central/index.html +41 -0
- forgeo/web/central/instance.html +189 -0
- forgeo/web/style.css +656 -0
- forgeo/web_common.py +92 -0
- forgeo_cli-0.3.0.dist-info/METADATA +146 -0
- forgeo_cli-0.3.0.dist-info/RECORD +27 -0
- forgeo_cli-0.3.0.dist-info/WHEEL +4 -0
- forgeo_cli-0.3.0.dist-info/entry_points.txt +2 -0
- forgeo_cli-0.3.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<title>Forgeo · Instances</title>
|
|
7
|
+
<link rel="stylesheet" href="/style.css">
|
|
8
|
+
<link rel="stylesheet" href="/central/central.css">
|
|
9
|
+
</head>
|
|
10
|
+
<body data-page="home">
|
|
11
|
+
<div class="shell">
|
|
12
|
+
|
|
13
|
+
<header class="topbar">
|
|
14
|
+
<div class="brand">
|
|
15
|
+
<span class="brand-dot" aria-hidden="true"></span>
|
|
16
|
+
<span class="brand-name">Forgeo · Instances</span>
|
|
17
|
+
</div>
|
|
18
|
+
<dl class="meta">
|
|
19
|
+
<div class="meta-item">
|
|
20
|
+
<dt>instances</dt>
|
|
21
|
+
<dd id="meta-count">—</dd>
|
|
22
|
+
</div>
|
|
23
|
+
</dl>
|
|
24
|
+
</header>
|
|
25
|
+
|
|
26
|
+
<main class="instance-list" id="instance-list" aria-live="polite">
|
|
27
|
+
<div class="empty-state" id="empty-state" hidden>
|
|
28
|
+
<p class="empty-title">No registered instances</p>
|
|
29
|
+
<p class="empty-sub">Register one with <code>forgeo instance add NAME --config PATH</code>.</p>
|
|
30
|
+
</div>
|
|
31
|
+
</main>
|
|
32
|
+
|
|
33
|
+
<footer class="footerbar">
|
|
34
|
+
<span class="notice" id="daemon-notice" hidden>central dashboard unreachable — retrying every 30s</span>
|
|
35
|
+
<span class="fetch-time">fetch <time id="fetch-time">never</time></span>
|
|
36
|
+
</footer>
|
|
37
|
+
|
|
38
|
+
</div>
|
|
39
|
+
<script src="/central/central.js"></script>
|
|
40
|
+
</body>
|
|
41
|
+
</html>
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<title>Forgeo · Instance</title>
|
|
7
|
+
<link rel="stylesheet" href="/style.css">
|
|
8
|
+
<link rel="stylesheet" href="/central/central.css">
|
|
9
|
+
</head>
|
|
10
|
+
<body data-page="instance">
|
|
11
|
+
<div class="shell">
|
|
12
|
+
|
|
13
|
+
<header class="topbar">
|
|
14
|
+
<div class="brand">
|
|
15
|
+
<span class="brand-dot" aria-hidden="true"></span>
|
|
16
|
+
<span class="brand-name" id="forgeo-name">Instance</span>
|
|
17
|
+
</div>
|
|
18
|
+
<dl class="meta">
|
|
19
|
+
<div class="meta-item">
|
|
20
|
+
<dt>daemon</dt>
|
|
21
|
+
<dd><span class="daemon-badge" id="meta-daemon">—</span></dd>
|
|
22
|
+
</div>
|
|
23
|
+
<div class="meta-item">
|
|
24
|
+
<dt>repo</dt>
|
|
25
|
+
<dd id="meta-repo">—</dd>
|
|
26
|
+
</div>
|
|
27
|
+
<div class="meta-item">
|
|
28
|
+
<dt>interval</dt>
|
|
29
|
+
<dd id="meta-interval">—</dd>
|
|
30
|
+
</div>
|
|
31
|
+
<div class="meta-item">
|
|
32
|
+
<dt>next run</dt>
|
|
33
|
+
<dd id="meta-next">—</dd>
|
|
34
|
+
</div>
|
|
35
|
+
<div class="meta-item">
|
|
36
|
+
<dt>last outcome</dt>
|
|
37
|
+
<dd id="meta-outcome">—</dd>
|
|
38
|
+
</div>
|
|
39
|
+
</dl>
|
|
40
|
+
</header>
|
|
41
|
+
|
|
42
|
+
<nav class="tabs" id="tabs">
|
|
43
|
+
<button class="tab is-active" data-tab="backlog" type="button">Backlog</button>
|
|
44
|
+
<button class="tab" data-tab="create" type="button">Create</button>
|
|
45
|
+
<button class="tab" data-tab="logs" type="button">Logs</button>
|
|
46
|
+
<button class="tab" data-tab="runs" type="button">Runs</button>
|
|
47
|
+
<button class="tab" data-tab="blocker" type="button">Blocker</button>
|
|
48
|
+
<button class="tab" data-tab="config" type="button">Config</button>
|
|
49
|
+
</nav>
|
|
50
|
+
|
|
51
|
+
<main id="tab-backlog" class="tab-panel board" aria-live="polite">
|
|
52
|
+
<div class="empty-state" id="empty-state" hidden>
|
|
53
|
+
<p class="empty-title">No tasks</p>
|
|
54
|
+
<p class="empty-sub">The backlog is empty. The forgeo will run a refactoring pass until a task lands.</p>
|
|
55
|
+
</div>
|
|
56
|
+
</main>
|
|
57
|
+
<main id="tab-create" class="tab-panel" hidden>
|
|
58
|
+
<form class="new-task" id="new-task">
|
|
59
|
+
<div class="new-task__fields">
|
|
60
|
+
<label class="new-task__field" for="task-title">
|
|
61
|
+
<span>Title</span>
|
|
62
|
+
<input id="task-title" name="title" type="text" placeholder="New task title" autocomplete="off" required>
|
|
63
|
+
</label>
|
|
64
|
+
<label class="new-task__field" for="task-description">
|
|
65
|
+
<span>Description</span>
|
|
66
|
+
<textarea id="task-description" name="description" rows="3" placeholder="What should the agent do?" autocomplete="off" required></textarea>
|
|
67
|
+
</label>
|
|
68
|
+
<div class="new-task__field">
|
|
69
|
+
<span>Acceptance criteria</span>
|
|
70
|
+
<div class="new-task__criteria-row">
|
|
71
|
+
<input id="task-acceptance-input" type="text" placeholder="e.g. passes pytest" autocomplete="off">
|
|
72
|
+
<button class="new-task__add" id="task-acceptance-add" type="button" aria-label="Add acceptance criterion">+</button>
|
|
73
|
+
</div>
|
|
74
|
+
<ul class="new-task__criteria-list" id="task-acceptance-list"></ul>
|
|
75
|
+
</div>
|
|
76
|
+
<label class="new-task__field" for="task-command">
|
|
77
|
+
<span>Agent command (optional)</span>
|
|
78
|
+
<input id="task-command" name="agent_command" type="text" placeholder="e.g. claude -p "$FORGEO_TASK" --model claude-3-haiku" autocomplete="off">
|
|
79
|
+
</label>
|
|
80
|
+
</div>
|
|
81
|
+
<button type="submit">Add task</button>
|
|
82
|
+
<p class="new-task__error" id="new-task-error" hidden></p>
|
|
83
|
+
</form>
|
|
84
|
+
</main>
|
|
85
|
+
<main id="tab-logs" class="tab-panel" hidden>
|
|
86
|
+
<pre class="code-panel" id="logs-body">(loading …)</pre>
|
|
87
|
+
</main>
|
|
88
|
+
<main id="tab-runs" class="tab-panel" hidden>
|
|
89
|
+
<div class="table-wrap" id="runs-body"></div>
|
|
90
|
+
</main>
|
|
91
|
+
<main id="tab-blocker" class="tab-panel" hidden>
|
|
92
|
+
<pre class="code-panel" id="blocker-body">(loading …)</pre>
|
|
93
|
+
</main>
|
|
94
|
+
<main id="tab-config" class="tab-panel" hidden>
|
|
95
|
+
<pre class="code-panel" id="config-body">(loading …)</pre>
|
|
96
|
+
</main>
|
|
97
|
+
|
|
98
|
+
<footer class="footerbar">
|
|
99
|
+
<a class="footer-link" href="/">← all instances</a>
|
|
100
|
+
<span class="notice" id="daemon-notice" hidden>daemon not reachable — retrying every 30s</span>
|
|
101
|
+
<span class="fetch-time">fetch <time id="fetch-time">never</time></span>
|
|
102
|
+
</footer>
|
|
103
|
+
|
|
104
|
+
</div>
|
|
105
|
+
|
|
106
|
+
<div class="modal-backdrop" id="task-modal" hidden>
|
|
107
|
+
<div class="modal" role="dialog" aria-modal="true" aria-labelledby="task-modal-title" tabindex="-1">
|
|
108
|
+
<header class="modal__head">
|
|
109
|
+
<div class="modal__headings">
|
|
110
|
+
<span class="modal__id" id="task-modal-id"></span>
|
|
111
|
+
<h2 class="modal__title" id="task-modal-title"></h2>
|
|
112
|
+
</div>
|
|
113
|
+
<div class="modal__head-actions">
|
|
114
|
+
<button class="modal__btn" id="task-modal-edit" type="button">Edit</button>
|
|
115
|
+
<button class="modal__close" id="task-modal-close" type="button" aria-label="Close">×</button>
|
|
116
|
+
</div>
|
|
117
|
+
</header>
|
|
118
|
+
<div class="modal__body">
|
|
119
|
+
<div id="task-modal-view">
|
|
120
|
+
<div>
|
|
121
|
+
<span class="badge" id="task-modal-status"></span>
|
|
122
|
+
</div>
|
|
123
|
+
<section class="modal__section" id="task-modal-description-section" hidden>
|
|
124
|
+
<h3>Description</h3>
|
|
125
|
+
<p class="modal__desc" id="task-modal-description"></p>
|
|
126
|
+
</section>
|
|
127
|
+
<section class="modal__section" id="task-modal-acceptance-section" hidden>
|
|
128
|
+
<h3>Acceptance criteria</h3>
|
|
129
|
+
<ul class="modal__list" id="task-modal-acceptance"></ul>
|
|
130
|
+
</section>
|
|
131
|
+
<section class="modal__section" id="task-modal-dependencies-section" hidden>
|
|
132
|
+
<h3>Dependencies</h3>
|
|
133
|
+
<ul class="modal__list" id="task-modal-dependencies"></ul>
|
|
134
|
+
</section>
|
|
135
|
+
<section class="modal__section" id="task-modal-files-section" hidden>
|
|
136
|
+
<h3>Files to modify</h3>
|
|
137
|
+
<ul class="modal__list" id="task-modal-files"></ul>
|
|
138
|
+
</section>
|
|
139
|
+
<section class="modal__section" id="task-modal-command-section" hidden>
|
|
140
|
+
<h3>Agent command</h3>
|
|
141
|
+
<pre class="modal__command" id="task-modal-command"></pre>
|
|
142
|
+
</section>
|
|
143
|
+
</div>
|
|
144
|
+
<form class="modal__edit" id="task-modal-edit-form" hidden>
|
|
145
|
+
<div class="modal__edit-field">
|
|
146
|
+
<label for="task-edit-title">Title</label>
|
|
147
|
+
<input id="task-edit-title" name="title" type="text" autocomplete="off">
|
|
148
|
+
</div>
|
|
149
|
+
<div class="modal__edit-field">
|
|
150
|
+
<label for="task-edit-description">Description</label>
|
|
151
|
+
<textarea id="task-edit-description" name="description" rows="3"></textarea>
|
|
152
|
+
</div>
|
|
153
|
+
<div class="modal__edit-field">
|
|
154
|
+
<label for="task-edit-acceptance">Acceptance criteria (one per line)</label>
|
|
155
|
+
<textarea id="task-edit-acceptance" name="acceptance_criteria" rows="3"></textarea>
|
|
156
|
+
</div>
|
|
157
|
+
<div class="modal__edit-field">
|
|
158
|
+
<label for="task-edit-dependencies">Dependencies (one per line)</label>
|
|
159
|
+
<textarea id="task-edit-dependencies" name="dependencies" rows="3"></textarea>
|
|
160
|
+
</div>
|
|
161
|
+
<div class="modal__edit-field">
|
|
162
|
+
<label for="task-edit-files">Files to modify (one per line)</label>
|
|
163
|
+
<textarea id="task-edit-files" name="files_to_modify" rows="3"></textarea>
|
|
164
|
+
</div>
|
|
165
|
+
<div class="modal__edit-field">
|
|
166
|
+
<label for="task-edit-command">Agent command</label>
|
|
167
|
+
<input id="task-edit-command" name="agent_command" type="text" autocomplete="off">
|
|
168
|
+
</div>
|
|
169
|
+
<div class="modal__edit-field">
|
|
170
|
+
<label for="task-edit-timeout">Agent timeout (seconds)</label>
|
|
171
|
+
<input id="task-edit-timeout" name="agent_timeout_seconds" type="text" autocomplete="off">
|
|
172
|
+
</div>
|
|
173
|
+
<p class="modal__error" id="task-modal-error" hidden></p>
|
|
174
|
+
<div class="modal__edit-actions">
|
|
175
|
+
<button class="modal__btn" id="task-modal-cancel" type="button">Cancel</button>
|
|
176
|
+
<button class="modal__btn modal__btn--primary" id="task-modal-save" type="submit">Save</button>
|
|
177
|
+
</div>
|
|
178
|
+
</form>
|
|
179
|
+
<div class="modal__times">
|
|
180
|
+
<span>created <time id="task-modal-created"></time></span>
|
|
181
|
+
<span>updated <time id="task-modal-updated"></time></span>
|
|
182
|
+
</div>
|
|
183
|
+
</div>
|
|
184
|
+
</div>
|
|
185
|
+
</div>
|
|
186
|
+
|
|
187
|
+
<script src="/central/central.js"></script>
|
|
188
|
+
</body>
|
|
189
|
+
</html>
|