avtc-pi-featyard 1.1.0

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.
Files changed (153) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +194 -0
  3. package/agents/fy-design-reviewer.md +77 -0
  4. package/agents/fy-feature-verifier.md +24 -0
  5. package/agents/fy-general-reviewer.md +81 -0
  6. package/agents/fy-guidelines-reviewer.md +46 -0
  7. package/agents/fy-implementer.md +20 -0
  8. package/agents/fy-performance-reviewer.md +46 -0
  9. package/agents/fy-plan-reviewer.md +74 -0
  10. package/agents/fy-plan-verifier.md +44 -0
  11. package/agents/fy-quality-reviewer.md +50 -0
  12. package/agents/fy-requirements-reviewer.md +46 -0
  13. package/agents/fy-researcher.md +6 -0
  14. package/agents/fy-security-reviewer.md +46 -0
  15. package/agents/fy-task-verifier.md +42 -0
  16. package/agents/fy-testing-reviewer.md +60 -0
  17. package/assets/images/kanban-board.png +0 -0
  18. package/assets/images/settings-dropdown.png +0 -0
  19. package/assets/images/settings.png +0 -0
  20. package/assets/images/widget.png +0 -0
  21. package/docs/CONFIGURATION.md +266 -0
  22. package/index.ts +8 -0
  23. package/package.json +85 -0
  24. package/skills/fy-design/SKILL.md +108 -0
  25. package/skills/fy-design-review/SKILL.md +45 -0
  26. package/skills/fy-finish/SKILL.md +28 -0
  27. package/skills/fy-implement/SKILL.md +36 -0
  28. package/skills/fy-plan/SKILL.md +77 -0
  29. package/skills/fy-plan-review/SKILL.md +45 -0
  30. package/skills/fy-research/SKILL.md +38 -0
  31. package/skills/fy-review/SKILL.md +88 -0
  32. package/skills/fy-verify/SKILL.md +23 -0
  33. package/src/commands/auto-agent-commands.ts +748 -0
  34. package/src/commands/kanban-commands.ts +278 -0
  35. package/src/commands/workflow-commands.ts +531 -0
  36. package/src/compaction/compact-handler.ts +371 -0
  37. package/src/compaction/compact-message.ts +52 -0
  38. package/src/compaction/compact-trigger.ts +121 -0
  39. package/src/compaction/safe-editor-write.ts +18 -0
  40. package/src/events/agent/agent-end.ts +19 -0
  41. package/src/events/agent/agent-settled.ts +20 -0
  42. package/src/events/agent/agent-start.ts +18 -0
  43. package/src/events/agent/turn-end.ts +20 -0
  44. package/src/events/agent/turn-start.ts +19 -0
  45. package/src/events/event-deps.ts +33 -0
  46. package/src/events/index.ts +91 -0
  47. package/src/events/input/input.ts +143 -0
  48. package/src/events/session/context.ts +68 -0
  49. package/src/events/session/model-select.ts +20 -0
  50. package/src/events/session/session-compact.ts +20 -0
  51. package/src/events/session/session-shutdown.ts +26 -0
  52. package/src/events/session/session-start.ts +45 -0
  53. package/src/events/session/session-tree.ts +17 -0
  54. package/src/events/tool/tool-call.ts +58 -0
  55. package/src/events/tool/tool-result.ts +54 -0
  56. package/src/git/git-queries.ts +154 -0
  57. package/src/git/resolve-base-branch.ts +173 -0
  58. package/src/git/worktrees/worktree-helpers.ts +142 -0
  59. package/src/git/worktrees/worktree-interception.ts +66 -0
  60. package/src/git/worktrees/worktree-lifecycle.ts +380 -0
  61. package/src/guardrails/completion-gating.ts +63 -0
  62. package/src/guardrails/file-classifier.ts +461 -0
  63. package/src/guardrails/force-add-guard.ts +312 -0
  64. package/src/guardrails/guardrail-tracker.ts +73 -0
  65. package/src/guardrails/guardrail-violations.ts +47 -0
  66. package/src/guardrails/guardrails-engine.ts +663 -0
  67. package/src/guardrails/session-guardrails.ts +75 -0
  68. package/src/guardrails/shell-decompose.ts +285 -0
  69. package/src/guardrails/tdd-enforcement.ts +122 -0
  70. package/src/guardrails/test-output.ts +272 -0
  71. package/src/index.ts +598 -0
  72. package/src/integrations/parallel-work-guardrail-integration.ts +29 -0
  73. package/src/integrations/subagent-integration.ts +166 -0
  74. package/src/integrations/todo-integration.ts +58 -0
  75. package/src/kanban/auto-agent/auto-agent-cleanup.ts +37 -0
  76. package/src/kanban/auto-agent/auto-agent-events.ts +142 -0
  77. package/src/kanban/auto-agent/auto-agent-grace-period.ts +83 -0
  78. package/src/kanban/auto-agent/auto-agent-lifecycle.ts +497 -0
  79. package/src/kanban/auto-agent/auto-agent-notify.ts +43 -0
  80. package/src/kanban/auto-agent/auto-agent-pause.ts +44 -0
  81. package/src/kanban/auto-agent/auto-agent-state-machine.ts +629 -0
  82. package/src/kanban/data/kanban-database.ts +851 -0
  83. package/src/kanban/data/kanban-db-schema.ts +137 -0
  84. package/src/kanban/data/kanban-detect-project.ts +43 -0
  85. package/src/kanban/data/kanban-move-feature.ts +43 -0
  86. package/src/kanban/data/kanban-types.ts +64 -0
  87. package/src/kanban/ensure-feature.ts +226 -0
  88. package/src/kanban/kanban-board-ui/app.js +1125 -0
  89. package/src/kanban/kanban-board-ui/csv-parser.d.ts +5 -0
  90. package/src/kanban/kanban-board-ui/csv-parser.js +80 -0
  91. package/src/kanban/kanban-board-ui/index.html +127 -0
  92. package/src/kanban/kanban-board-ui/style.css +820 -0
  93. package/src/kanban/kanban-bridge.ts +216 -0
  94. package/src/kanban/kanban-context.ts +43 -0
  95. package/src/kanban/kanban-events.ts +34 -0
  96. package/src/kanban/kanban-generate-title.ts +259 -0
  97. package/src/kanban/kanban-generate-topic.ts +170 -0
  98. package/src/kanban/kanban-operations.ts +170 -0
  99. package/src/kanban/kanban-server.ts +931 -0
  100. package/src/kanban/kanban-turn-handlers.ts +55 -0
  101. package/src/kanban/model-capture.ts +34 -0
  102. package/src/log.ts +47 -0
  103. package/src/phases/env-sync.ts +64 -0
  104. package/src/phases/execution-mode.ts +79 -0
  105. package/src/phases/implement-to-verify.ts +31 -0
  106. package/src/phases/phase-progression.ts +249 -0
  107. package/src/phases/phase-transitions.ts +226 -0
  108. package/src/phases/workflow-router.ts +98 -0
  109. package/src/prompts/finish-instructions.ts +143 -0
  110. package/src/prompts/skill-block-builder.ts +73 -0
  111. package/src/prompts/skill-expansion.ts +262 -0
  112. package/src/prompts/task-gate-skill.ts +83 -0
  113. package/src/prompts/template-engine.ts +433 -0
  114. package/src/prompts/text-blocks.ts +279 -0
  115. package/src/review/review-context.ts +56 -0
  116. package/src/review/review-counter.ts +66 -0
  117. package/src/review/review-empty-loop-tracking.ts +52 -0
  118. package/src/review/review-loops.ts +217 -0
  119. package/src/review/review-report.ts +101 -0
  120. package/src/settings/model-overrides.ts +269 -0
  121. package/src/settings/settings-schema.ts +458 -0
  122. package/src/settings/settings-types.ts +81 -0
  123. package/src/settings/settings-ui.ts +222 -0
  124. package/src/shared/errors.ts +24 -0
  125. package/src/shared/global.d.ts +22 -0
  126. package/src/shared/session-entries.ts +24 -0
  127. package/src/shared/types.ts +195 -0
  128. package/src/shared/workflow-refs.ts +253 -0
  129. package/src/shared/workflow-types.ts +180 -0
  130. package/src/snippets/vendored/subscribe-to-dialog-coordinator.ts +98 -0
  131. package/src/snippets/vendored/subscribe-to-notifications.ts +150 -0
  132. package/src/snippets/vendored/subscribe-to-parallel-work-guardrail.ts +35 -0
  133. package/src/snippets/vendored/subscribe-to-subagent.ts +67 -0
  134. package/src/snippets/vendored/subscribe-to-todo.ts +63 -0
  135. package/src/state/archive-artifacts.ts +602 -0
  136. package/src/state/artifact-junction.ts +462 -0
  137. package/src/state/artifact-paths.ts +230 -0
  138. package/src/state/feature-activation.ts +239 -0
  139. package/src/state/feature-management.ts +325 -0
  140. package/src/state/feature-record-store.ts +39 -0
  141. package/src/state/feature-session.ts +263 -0
  142. package/src/state/feature-state.ts +439 -0
  143. package/src/state/post-turn-dispatch.ts +106 -0
  144. package/src/state/session-lifecycle.ts +346 -0
  145. package/src/state/state-persistence.ts +122 -0
  146. package/src/state/worth-notes.ts +89 -0
  147. package/src/tools/add-to-backlog.ts +117 -0
  148. package/src/tools/phase-ready.ts +742 -0
  149. package/src/tools/task-ready-advance.ts +235 -0
  150. package/src/tools/text-result.ts +15 -0
  151. package/src/ui/featyard-widget.ts +250 -0
  152. package/src/ui/manage-features-dialog.ts +246 -0
  153. package/src/ui/select-dialog.ts +27 -0
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Type declaration for csv-parser.js (UMD-style JS module).
3
+ */
4
+ declare function parseCSV(text: string): string[];
5
+ export default parseCSV;
@@ -0,0 +1,80 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // SPDX-FileCopyrightText: 2026 avtc <tarasenkov@gmail.com>
3
+
4
+ /**
5
+ * RFC 4180 CSV parser for single-column extraction.
6
+ *
7
+ * Exposed globally as `parseCSV` in browser environments.
8
+ * Also exportable for Node.js test usage.
9
+ */
10
+
11
+ ((root, factory) => {
12
+ if (typeof module === "object" && module.exports) {
13
+ // Node.js / CommonJS
14
+ module.exports = factory();
15
+ } else {
16
+ // Browser — attach to global scope
17
+ root.parseCSV = factory();
18
+ }
19
+ })(typeof self !== "undefined" ? self : globalThis, () => {
20
+ /**
21
+ * Parse single-column CSV text into an array of description strings.
22
+ * Handles RFC 4180 quoted fields (embedded newlines, commas, escaped "").
23
+ * Graceful on malformed input: unterminated quoted fields are returned as-is
24
+ * rather than throwing, which is reasonable for user-uploaded CSVs.
25
+ */
26
+ return function parseCSV(text) {
27
+ if (!text) return [];
28
+ const rows = [];
29
+ let i = 0;
30
+ while (i < text.length) {
31
+ const fields = [];
32
+ while (i < text.length) {
33
+ if (text[i] === '"') {
34
+ // Quoted field
35
+ i++;
36
+ let value = "";
37
+ while (i < text.length) {
38
+ if (text[i] === '"') {
39
+ if (text[i + 1] === '"') {
40
+ value += '"';
41
+ i += 2;
42
+ } else {
43
+ i++;
44
+ break;
45
+ }
46
+ } else {
47
+ value += text[i];
48
+ i++;
49
+ }
50
+ }
51
+ fields.push(value);
52
+ if (text[i] === ",") {
53
+ i++;
54
+ } else break;
55
+ } else {
56
+ // Unquoted field — read until comma or newline
57
+ let value = "";
58
+ while (i < text.length && text[i] !== "," && text[i] !== "\n" && text[i] !== "\r") {
59
+ if (text[i] === '"' && text[i + 1] === '"') {
60
+ value += '"';
61
+ i += 2;
62
+ } else {
63
+ value += text[i];
64
+ i++;
65
+ }
66
+ }
67
+ fields.push(value);
68
+ if (text[i] === ",") {
69
+ i++;
70
+ } else break;
71
+ }
72
+ }
73
+ rows.push(fields[0] ?? "");
74
+ // Skip newline
75
+ if (text[i] === "\r") i++;
76
+ if (text[i] === "\n") i++;
77
+ }
78
+ return rows;
79
+ };
80
+ });
@@ -0,0 +1,127 @@
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.0">
6
+ <title>Kanban Board</title>
7
+ <link rel="stylesheet" href="style.css">
8
+ </head>
9
+ <body>
10
+ <div id="app">
11
+ <header>
12
+ <h1>Kanban Board</h1>
13
+ <div class="controls">
14
+ <select id="project-select"><option value="">Select project...</option></select>
15
+ <button id="add-btn" title="Add feature" disabled>+</button>
16
+ <button id="import-btn" title="Import from CSV" disabled>Import</button>
17
+ <button id="export-btn" title="Export to CSV" disabled>Export</button>
18
+ <div id="export-dropdown" class="export-dropdown hidden">
19
+ <div class="export-dropdown-content">
20
+ <div class="export-dropdown-header">
21
+ <span>Select lanes</span>
22
+ <button id="export-toggle-all" class="export-toggle-btn">Deselect All</button>
23
+ </div>
24
+ <div id="export-lane-checkboxes"></div>
25
+ <button id="export-download-btn" class="submit-btn" style="margin-top:8px;width:100%">Download CSV</button>
26
+ </div>
27
+ </div>
28
+ <input type="file" id="import-file" accept=".csv,.txt" style="display:none" />
29
+ <button id="refresh-btn" title="Refresh">↻</button>
30
+ </div>
31
+ </header>
32
+ <div id="import-banner" class="import-banner hidden"></div>
33
+ <main id="board"></main>
34
+ </div>
35
+
36
+ <!-- Unified detail modal -->
37
+ <div id="detail-modal" class="modal hidden">
38
+ <div class="modal-content detail-modal-content">
39
+ <button class="modal-close">&times;</button>
40
+ <h2 id="detail-title"></h2>
41
+ <div id="detail-id"></div>
42
+ <div class="detail-meta">
43
+ <div>Lane: <span id="detail-meta-lane"></span></div>
44
+ <div>Priority: <span id="detail-meta-priority"></span></div>
45
+ <div>Created: <span id="detail-meta-created"></span></div>
46
+ </div>
47
+ <div class="detail-tabs">
48
+ <button class="detail-tab active" data-tab="details">Details</button>
49
+ <button class="detail-tab" data-tab="history">History</button>
50
+ </div>
51
+ <div id="detail-tab-details" class="detail-tab-content active">
52
+ <label class="detail-description-label">Description</label>
53
+ <textarea id="detail-description" rows="10"></textarea>
54
+ <button id="detail-save-btn" class="submit-btn detail-save-btn">Save</button>
55
+ <div id="detail-status-row" class="detail-row" style="display:none"></div>
56
+ <div id="detail-lock-row" class="detail-row" style="display:none"></div>
57
+ <button id="release-lock-btn" class="release-btn" style="display:none">Release Lock</button>
58
+ <button id="lock-btn" class="lock-btn" style="display:none">Lock Feature</button>
59
+ <button id="delete-btn" class="delete-btn">Delete Feature</button>
60
+ </div>
61
+ <div id="detail-tab-history" class="detail-tab-content">
62
+ <div id="detail-history-body" class="detail-history-scroll">
63
+ <p style="color:#64748b">Loading...</p>
64
+ </div>
65
+ </div>
66
+ </div>
67
+ </div>
68
+
69
+ <div id="add-modal" class="modal hidden">
70
+ <div class="modal-content">
71
+ <button class="modal-close">&times;</button>
72
+ <h2>Add Feature</h2>
73
+ <div class="add-form">
74
+ <div class="form-group">
75
+ <label for="add-title">Title</label>
76
+ <div class="title-input-row">
77
+ <input type="text" id="add-title" maxlength="200" required placeholder="Feature title">
78
+ <button type="button" id="add-generate-title-btn" class="generate-title-btn" title="Generate title from description using AI">✨</button>
79
+ </div>
80
+ </div>
81
+ <div class="form-group">
82
+ <label for="add-description">Description</label>
83
+ <textarea id="add-description" rows="4" placeholder="Optional description"></textarea>
84
+ </div>
85
+ <div class="form-row">
86
+ <div class="form-group">
87
+ <label>Position</label>
88
+ <div class="position-toggle">
89
+ <button type="button" class="position-toggle-btn" data-position="top">Top</button>
90
+ <button type="button" class="position-toggle-btn active" data-position="bottom">Bottom</button>
91
+ </div>
92
+ </div>
93
+ <div class="form-group">
94
+ <label for="add-lane">Lane</label>
95
+ <select id="add-lane"></select>
96
+ </div>
97
+ </div>
98
+ <button id="add-submit-btn" class="submit-btn">Add Feature</button>
99
+ </div>
100
+ </div>
101
+ </div>
102
+ <div id="skipped-modal" class="modal hidden">
103
+ <div class="modal-content" style="max-width:600px">
104
+ <button class="modal-close">&times;</button>
105
+ <h2 id="skipped-title"></h2>
106
+ <pre id="skipped-details" class="skipped-details"></pre>
107
+ <button id="skipped-copy-btn" class="submit-btn" style="margin-top:12px">Copy Details</button>
108
+ </div>
109
+ </div>
110
+ <div id="import-confirm-modal" class="modal hidden">
111
+ <div class="modal-content">
112
+ <button class="modal-close">&times;</button>
113
+ <h2>Import from CSV</h2>
114
+ <p id="import-confirm-count"></p>
115
+ <div class="form-group">
116
+ <label><input type="checkbox" id="import-header-check" checked /> First row is a header</label>
117
+ </div>
118
+ <div class="form-row" style="margin-top:16px">
119
+ <button id="import-confirm-btn" class="submit-btn">Import</button>
120
+ <button id="import-cancel-btn" class="submit-btn" style="background:#6b7280">Cancel</button>
121
+ </div>
122
+ </div>
123
+ </div>
124
+ <script src="csv-parser.js"></script>
125
+ <script src="app.js"></script>
126
+ </body>
127
+ </html>