@relipa/ai-flow-kit 0.1.4 → 0.1.5-beta.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.
- package/README.md +0 -0
- package/bin/aiflow.js +0 -0
- package/bin/ak.js +0 -0
- package/custom/harness/playwright/.env.example +0 -0
- package/custom/harness/playwright/playwright.config.ts +0 -0
- package/custom/harness/playwright/tests/e2e/auth.setup.ts +0 -0
- package/custom/harness/playwright/tests/e2e/fixtures/test.ts +0 -0
- package/custom/harness/playwright/tests/e2e/pages/BasePage.ts +0 -0
- package/custom/harness/playwright/tests/e2e/support/auth.ts +0 -0
- package/custom/mcp-presets/README.md +0 -0
- package/custom/mcp-presets/backlog.json +0 -0
- package/custom/mcp-presets/figma-desktop.json +0 -0
- package/custom/mcp-presets/figma.json +0 -0
- package/custom/mcp-presets/gitnexus.json +0 -0
- package/custom/mcp-presets/google-sheets.json +0 -0
- package/custom/mcp-presets/jira.json +0 -0
- package/custom/mcp-presets/playwright.json +0 -0
- package/custom/prompts/bug-fix.md +0 -0
- package/custom/prompts/feature.md +0 -0
- package/custom/prompts/investigation.md +0 -0
- package/custom/rules/code-style.md +0 -0
- package/custom/rules/java/code-style.md +0 -0
- package/custom/rules/java/naming.md +0 -0
- package/custom/rules/java/review-checklist.md +0 -0
- package/custom/rules/java/spring-boot-examples.md +0 -0
- package/custom/rules/javascript/code-style.md +0 -0
- package/custom/rules/javascript/naming.md +0 -0
- package/custom/rules/ml-conventions.md +0 -0
- package/custom/rules/ml-review-checklist.md +0 -0
- package/custom/rules/naming.md +0 -0
- package/custom/rules/php/code-style.md +0 -0
- package/custom/rules/php/naming.md +0 -0
- package/custom/rules/project-conventions.md +0 -0
- package/custom/rules/review-checklist.md +0 -0
- package/custom/rules/test-patterns.md +0 -0
- package/custom/skills/automation-testing/SKILL.md +0 -0
- package/custom/skills/automation-testing/templates/BasePage.ts +0 -0
- package/custom/skills/automation-testing/templates/PageObject.example.ts +0 -0
- package/custom/skills/automation-testing/templates/playwright.config.ts +0 -0
- package/custom/skills/automation-testing/templates/spec.example.ts +0 -0
- package/custom/skills/ba-skills/{skill-ba-xay-dung-business-rules-v1.md → skill-ba-build-business-rules-v1.md} +0 -0
- package/custom/skills/ba-skills/{skill-ba-template-phan-tich-ban-dau-v1.md → skill-ba-initial-analysis-template-v1.md} +0 -0
- package/custom/skills/ba-skills/{skill-ba-phan-tich-ban-dau-v1.md → skill-ba-initial-analysis-v1.md} +2 -2
- package/custom/skills/ba-skills/{skill-ba-ve-luong-mermaid-v1.md → skill-ba-mermaid-flowchart-v1.md} +0 -0
- package/custom/skills/ba-skills/{skill-ba-qa-template-v1.md → skill-ba-qna-template-v1.md} +0 -0
- package/custom/skills/ba-skills/{skill-ba-qa-v1.md → skill-ba-qna-v1.md} +2 -2
- package/custom/skills/ba-skills/{skill-ba-template-uc-v1.md → skill-ba-uc-template-v1.md} +0 -0
- package/custom/skills/ba-skills/{skill-ba-prototype-v1.md → skill-ba-ui-prototype-v1.md} +2 -2
- package/custom/skills/ba-skills/{skill-ba-viet-spec-uc-v1.md → skill-ba-write-uc-spec-v1.md} +4 -4
- package/custom/skills/coverage-check/SKILL.md +0 -0
- package/custom/skills/deploy-model/SKILL.md +0 -0
- package/custom/skills/design-experiment/SKILL.md +0 -0
- package/custom/skills/evaluate-model/SKILL.md +0 -0
- package/custom/skills/evidence-aggregation/SKILL.md +0 -0
- package/custom/skills/execute-flow/SKILL.md +0 -0
- package/custom/skills/execute-flow/templates/playwright.config.ts +0 -0
- package/custom/skills/explore-data/SKILL.md +0 -0
- package/custom/skills/figma-to-component/SKILL.md +0 -0
- package/custom/skills/frame-ml-problem/SKILL.md +0 -0
- package/custom/skills/gate-review/SKILL.md +0 -0
- package/custom/skills/generate-spec/SKILL.md +0 -0
- package/custom/skills/generate-test-report/SKILL.md +0 -0
- package/custom/skills/generate-test-report/templates/test-report.md +0 -0
- package/custom/skills/generate-testcase/SKILL.md +0 -0
- package/custom/skills/generate-testcase/templates/testcase.md +0 -0
- package/custom/skills/impact-analysis/SKILL.md +0 -0
- package/custom/skills/improve-algorithm/SKILL.md +0 -0
- package/custom/skills/investigate-bug/SKILL.md +0 -0
- package/custom/skills/log-bug/SKILL.md +0 -0
- package/custom/skills/pr-impact-analysis/SKILL.md +0 -0
- package/custom/skills/report-customer/SKILL.md +0 -0
- package/custom/skills/retest-orchestration/SKILL.md +0 -0
- package/custom/skills/review-plan/SKILL.md +0 -0
- package/custom/skills/script-sync/SKILL.md +0 -0
- package/custom/skills/test-analysis/SKILL.md +0 -0
- package/custom/skills/test-skills/categories/00-core/00.01.requirement-analysis.md +0 -0
- package/custom/skills/test-skills/categories/00-core/00.02.risk-analysis.md +0 -0
- package/custom/skills/test-skills/categories/00-core/00.03.test-scenario-builder.md +0 -0
- package/custom/skills/test-skills/categories/00-core/00.04.testcase-review.md +0 -0
- package/custom/skills/test-skills/categories/01-test-design/01.01.boundary-value-analysis.md +0 -0
- package/custom/skills/test-skills/categories/01-test-design/01.02.equivalence.partitioning.md +0 -0
- package/custom/skills/test-skills/categories/01-test-design/01.03.decision-table.md +0 -0
- package/custom/skills/test-skills/categories/01-test-design/01.04.state.transition.md +0 -0
- package/custom/skills/test-skills/categories/01-test-design/01.05.pairwise.md +0 -0
- package/custom/skills/test-skills/categories/01-test-design/01.06.error-guessing.md +0 -0
- package/custom/skills/test-skills/categories/02-ui-testing/02.01.UI-layout.md +0 -0
- package/custom/skills/test-skills/categories/02-ui-testing/02.02.form-validation.md +0 -0
- package/custom/skills/test-skills/categories/02-ui-testing/02.03.navigation.md +0 -0
- package/custom/skills/test-skills/categories/02-ui-testing/02.04.localization.md +0 -0
- package/custom/skills/test-skills/categories/02-ui-testing/02.05.accessibility.md +0 -0
- package/custom/skills/test-skills/categories/03-business-testing/03.01.CRUD-testing.md +0 -0
- package/custom/skills/test-skills/categories/03-business-testing/03.02.workflow-testing.md +0 -0
- package/custom/skills/test-skills/categories/03-business-testing/03.03.permission-testing.md +0 -0
- package/custom/skills/test-skills/categories/03-business-testing/03.04.dependency-validation.md +0 -0
- package/custom/skills/test-skills/categories/03-business-testing/03.05.notification-testing.md +0 -0
- package/custom/skills/test-skills/categories/03-business-testing/03.06.calculation.testing.md +0 -0
- package/custom/skills/test-skills/categories/04-data-testing/04.01.database-testing.md +0 -0
- package/custom/skills/test-skills/categories/04-data-testing/04.02.import-export-testing.md +0 -0
- package/custom/skills/test-skills/categories/04-data-testing/04.03.data-mapping.md +0 -0
- package/custom/skills/test-skills/categories/04-data-testing/04.04.duplicate-handling.md +0 -0
- package/custom/skills/test-skills/categories/04-data-testing/04.05.migration.md +0 -0
- package/custom/skills/test-skills/categories/05-integration/05.01.API-testing.md +0 -0
- package/custom/skills/test-skills/categories/05-integration/05.02.third-party-integration.md +0 -0
- package/custom/skills/test-skills/categories/05-integration/05.03.batch-processing.md +0 -0
- package/custom/skills/test-skills/categories/05-integration/05.04.file-upload-download.md +0 -0
- package/custom/skills/test-skills/categories/08-domain-skills/CMS.md +0 -0
- package/custom/skills/test-skills/categories/08-domain-skills/Ecommerce.md +0 -0
- package/custom/skills/test-skills/categories/99-review/99.01.coverage-review.md +0 -0
- package/custom/skills/test-skills/categories/99-review/99.02.knowledge-learning.md +0 -0
- package/custom/skills/test-skills/categories/99-review/99.03.repository-update.md +0 -0
- package/custom/skills/test-skills/categories/99-review/99.04.change-history.md +0 -0
- package/custom/skills/test-skills/rules/directory-and-naming-convention.md +158 -0
- package/custom/skills/test-skills/rules/{QA_Writing_Standards.md → qa-writing-standards.md} +0 -0
- package/custom/skills/test-skills/template/{template_testcase.md → testcase-template.md} +0 -0
- package/custom/skills/train-model/SKILL.md +0 -0
- package/custom/templates/laravel.md +0 -0
- package/custom/templates/nestjs.md +0 -0
- package/custom/templates/nextjs.md +0 -0
- package/custom/templates/nodejs-express.md +0 -0
- package/custom/templates/php-plain.md +0 -0
- package/custom/templates/php.md +0 -0
- package/custom/templates/python-django.md +0 -0
- package/custom/templates/python-fastapi.md +0 -0
- package/custom/templates/python-ml.md +0 -0
- package/custom/templates/python.md +0 -0
- package/custom/templates/reactjs.md +0 -0
- package/custom/templates/shared/coding-workflow.md +15 -0
- package/custom/templates/shared/create-spec-workflow.md +80 -89
- package/custom/templates/shared/create-testcase-workflow.md +65 -75
- package/custom/templates/shared/gate-workflow.md +3 -3
- package/custom/templates/shared/ml-gate-workflow.md +0 -0
- package/custom/templates/spring-boot.md +0 -0
- package/custom/templates/tools/claude.md +0 -0
- package/custom/templates/tools/copilot.md +0 -0
- package/custom/templates/tools/cursor.md +0 -0
- package/custom/templates/tools/gemini.md +0 -0
- package/custom/templates/tools/generic.md +0 -0
- package/custom/templates/vue-nuxt.md +0 -0
- package/docs/common/AIFLOW.md +0 -0
- package/docs/common/CHANGELOG.md +28 -9
- package/docs/common/QUICK_START.md +0 -0
- package/docs/common/ai-integration.md +0 -0
- package/docs/common/cli-reference.md +0 -0
- package/docs/common/configuration.md +0 -0
- package/docs/common/getting-started.md +0 -0
- package/docs/common/troubleshooting.md +0 -0
- package/docs/common/workflows/bug-fix.md +0 -0
- package/docs/common/workflows/feature.md +0 -0
- package/docs/common/workflows/figma.md +0 -0
- package/docs/common/workflows/impact-analysis.md +0 -0
- package/docs/common/workflows/investigation.md +0 -0
- package/docs/common/workflows/refactor.md +0 -0
- package/docs/project/ARCHITECTURE.md +0 -0
- package/index.js +0 -0
- package/package.json +1 -1
- package/scripts/checkpoint.js +0 -0
- package/scripts/config.js +0 -0
- package/scripts/context.js +0 -0
- package/scripts/create-score-excel.js +41 -47
- package/scripts/detect.js +0 -0
- package/scripts/doctor.js +0 -0
- package/scripts/gitnexus-worker.js +0 -0
- package/scripts/guide.js +0 -0
- package/scripts/hooks/block-git-write.js +0 -0
- package/scripts/hooks/session-start.js +1 -0
- package/scripts/hooks/session-stop.js +0 -0
- package/scripts/init.js +5 -0
- package/scripts/memory.js +0 -0
- package/scripts/prompt.js +0 -0
- package/scripts/remove.js +0 -0
- package/scripts/review.js +0 -0
- package/scripts/scaffold-playwright.js +0 -0
- package/scripts/task.js +0 -0
- package/scripts/telemetry/cli.js +0 -0
- package/scripts/telemetry/config.js +0 -0
- package/scripts/telemetry/crypto.js +0 -0
- package/scripts/telemetry/flush.js +0 -0
- package/scripts/telemetry/record.js +0 -0
- package/scripts/update.js +0 -0
- package/scripts/use.js +3 -2
- package/scripts/validate.js +0 -0
- package/upstream/.claude-plugin/marketplace.json +0 -0
- package/upstream/.claude-plugin/plugin.json +0 -0
- package/upstream/.codex/INSTALL.md +0 -0
- package/upstream/.cursor-plugin/plugin.json +0 -0
- package/upstream/.gitattributes +0 -0
- package/upstream/.github/FUNDING.yml +0 -0
- package/upstream/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- package/upstream/.github/ISSUE_TEMPLATE/config.yml +0 -0
- package/upstream/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- package/upstream/.github/ISSUE_TEMPLATE/platform_support.md +0 -0
- package/upstream/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- package/upstream/.opencode/INSTALL.md +0 -0
- package/upstream/.opencode/plugins/superpowers.js +0 -0
- package/upstream/.version-bump.json +0 -0
- package/upstream/AGENTS.md +0 -0
- package/upstream/CHANGELOG.md +0 -0
- package/upstream/CLAUDE.md +0 -0
- package/upstream/CODE_OF_CONDUCT.md +0 -0
- package/upstream/GEMINI.md +0 -0
- package/upstream/LICENSE +0 -0
- package/upstream/README.md +0 -0
- package/upstream/RELEASE-NOTES.md +0 -0
- package/upstream/agents/code-reviewer.md +0 -0
- package/upstream/commands/brainstorm.md +0 -0
- package/upstream/commands/execute-plan.md +0 -0
- package/upstream/commands/write-plan.md +0 -0
- package/upstream/docs/README.codex.md +0 -0
- package/upstream/docs/README.opencode.md +0 -0
- package/upstream/docs/plans/2025-11-22-opencode-support-design.md +0 -0
- package/upstream/docs/plans/2025-11-22-opencode-support-implementation.md +0 -0
- package/upstream/docs/plans/2025-11-28-skills-improvements-from-user-feedback.md +0 -0
- package/upstream/docs/plans/2026-01-17-visual-brainstorming.md +0 -0
- package/upstream/docs/superpowers/plans/2026-01-22-document-review-system.md +0 -0
- package/upstream/docs/superpowers/plans/2026-02-19-visual-brainstorming-refactor.md +0 -0
- package/upstream/docs/superpowers/plans/2026-03-11-zero-dep-brainstorm-server.md +0 -0
- package/upstream/docs/superpowers/plans/2026-03-23-codex-app-compatibility.md +0 -0
- package/upstream/docs/superpowers/specs/2026-01-22-document-review-system-design.md +0 -0
- package/upstream/docs/superpowers/specs/2026-02-19-visual-brainstorming-refactor-design.md +0 -0
- package/upstream/docs/superpowers/specs/2026-03-11-zero-dep-brainstorm-server-design.md +0 -0
- package/upstream/docs/superpowers/specs/2026-03-23-codex-app-compatibility-design.md +0 -0
- package/upstream/docs/testing.md +0 -0
- package/upstream/docs/windows/polyglot-hooks.md +0 -0
- package/upstream/gemini-extension.json +0 -0
- package/upstream/hooks/hooks-cursor.json +0 -0
- package/upstream/hooks/hooks.json +0 -0
- package/upstream/hooks/run-hook.cmd +0 -0
- package/upstream/hooks/session-start +0 -0
- package/upstream/package.json +0 -0
- package/upstream/scripts/bump-version.sh +0 -0
- package/upstream/skills/brainstorming/SKILL.md +0 -0
- package/upstream/skills/brainstorming/scripts/frame-template.html +0 -0
- package/upstream/skills/brainstorming/scripts/helper.js +0 -0
- package/upstream/skills/brainstorming/scripts/server.cjs +0 -0
- package/upstream/skills/brainstorming/scripts/start-server.sh +0 -0
- package/upstream/skills/brainstorming/scripts/stop-server.sh +0 -0
- package/upstream/skills/brainstorming/spec-document-reviewer-prompt.md +0 -0
- package/upstream/skills/brainstorming/visual-companion.md +0 -0
- package/upstream/skills/dispatching-parallel-agents/SKILL.md +0 -0
- package/upstream/skills/executing-plans/SKILL.md +0 -0
- package/upstream/skills/finishing-a-development-branch/SKILL.md +0 -0
- package/upstream/skills/receiving-code-review/SKILL.md +0 -0
- package/upstream/skills/requesting-code-review/SKILL.md +0 -0
- package/upstream/skills/requesting-code-review/code-reviewer.md +0 -0
- package/upstream/skills/subagent-driven-development/SKILL.md +0 -0
- package/upstream/skills/subagent-driven-development/code-quality-reviewer-prompt.md +0 -0
- package/upstream/skills/subagent-driven-development/implementer-prompt.md +0 -0
- package/upstream/skills/subagent-driven-development/spec-reviewer-prompt.md +0 -0
- package/upstream/skills/systematic-debugging/CREATION-LOG.md +0 -0
- package/upstream/skills/systematic-debugging/SKILL.md +0 -0
- package/upstream/skills/systematic-debugging/condition-based-waiting-example.ts +0 -0
- package/upstream/skills/systematic-debugging/condition-based-waiting.md +0 -0
- package/upstream/skills/systematic-debugging/defense-in-depth.md +0 -0
- package/upstream/skills/systematic-debugging/find-polluter.sh +0 -0
- package/upstream/skills/systematic-debugging/root-cause-tracing.md +0 -0
- package/upstream/skills/systematic-debugging/test-academic.md +0 -0
- package/upstream/skills/systematic-debugging/test-pressure-1.md +0 -0
- package/upstream/skills/systematic-debugging/test-pressure-2.md +0 -0
- package/upstream/skills/systematic-debugging/test-pressure-3.md +0 -0
- package/upstream/skills/tdd-lean/SKILL.md +0 -0
- package/upstream/skills/test-driven-development/SKILL.md +0 -0
- package/upstream/skills/test-driven-development/testing-anti-patterns.md +0 -0
- package/upstream/skills/using-git-worktrees/SKILL.md +0 -0
- package/upstream/skills/using-superpowers/SKILL.md +0 -0
- package/upstream/skills/using-superpowers/references/codex-tools.md +0 -0
- package/upstream/skills/using-superpowers/references/copilot-tools.md +0 -0
- package/upstream/skills/using-superpowers/references/gemini-tools.md +0 -0
- package/upstream/skills/verification-before-completion/SKILL.md +0 -0
- package/upstream/skills/writing-plans/SKILL.md +0 -0
- package/upstream/skills/writing-plans/plan-document-reviewer-prompt.md +0 -0
- package/upstream/skills/writing-skills/SKILL.md +0 -0
- package/upstream/skills/writing-skills/anthropic-best-practices.md +0 -0
- package/upstream/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -0
- package/upstream/skills/writing-skills/graphviz-conventions.dot +0 -0
- package/upstream/skills/writing-skills/persuasion-principles.md +0 -0
- package/upstream/skills/writing-skills/render-graphs.js +0 -0
- package/upstream/skills/writing-skills/testing-skills-with-subagents.md +0 -0
- package/upstream/tests/brainstorm-server/package-lock.json +0 -0
- package/upstream/tests/brainstorm-server/package.json +0 -0
- package/upstream/tests/brainstorm-server/server.test.js +0 -0
- package/upstream/tests/brainstorm-server/windows-lifecycle.test.sh +0 -0
- package/upstream/tests/brainstorm-server/ws-protocol.test.js +0 -0
- package/upstream/tests/claude-code/README.md +0 -0
- package/upstream/tests/claude-code/analyze-token-usage.py +0 -0
- package/upstream/tests/claude-code/run-skill-tests.sh +0 -0
- package/upstream/tests/claude-code/test-document-review-system.sh +0 -0
- package/upstream/tests/claude-code/test-helpers.sh +0 -0
- package/upstream/tests/claude-code/test-subagent-driven-development-integration.sh +0 -0
- package/upstream/tests/claude-code/test-subagent-driven-development.sh +0 -0
- package/upstream/tests/explicit-skill-requests/prompts/action-oriented.txt +0 -0
- package/upstream/tests/explicit-skill-requests/prompts/after-planning-flow.txt +0 -0
- package/upstream/tests/explicit-skill-requests/prompts/claude-suggested-it.txt +0 -0
- package/upstream/tests/explicit-skill-requests/prompts/i-know-what-sdd-means.txt +0 -0
- package/upstream/tests/explicit-skill-requests/prompts/mid-conversation-execute-plan.txt +0 -0
- package/upstream/tests/explicit-skill-requests/prompts/please-use-brainstorming.txt +0 -0
- package/upstream/tests/explicit-skill-requests/prompts/skip-formalities.txt +0 -0
- package/upstream/tests/explicit-skill-requests/prompts/subagent-driven-development-please.txt +0 -0
- package/upstream/tests/explicit-skill-requests/prompts/use-systematic-debugging.txt +0 -0
- package/upstream/tests/explicit-skill-requests/run-all.sh +0 -0
- package/upstream/tests/explicit-skill-requests/run-claude-describes-sdd.sh +0 -0
- package/upstream/tests/explicit-skill-requests/run-extended-multiturn-test.sh +0 -0
- package/upstream/tests/explicit-skill-requests/run-haiku-test.sh +0 -0
- package/upstream/tests/explicit-skill-requests/run-multiturn-test.sh +0 -0
- package/upstream/tests/explicit-skill-requests/run-test.sh +0 -0
- package/upstream/tests/opencode/run-tests.sh +0 -0
- package/upstream/tests/opencode/setup.sh +0 -0
- package/upstream/tests/opencode/test-plugin-loading.sh +0 -0
- package/upstream/tests/opencode/test-priority.sh +0 -0
- package/upstream/tests/opencode/test-tools.sh +0 -0
- package/upstream/tests/skill-triggering/prompts/dispatching-parallel-agents.txt +0 -0
- package/upstream/tests/skill-triggering/prompts/executing-plans.txt +0 -0
- package/upstream/tests/skill-triggering/prompts/requesting-code-review.txt +0 -0
- package/upstream/tests/skill-triggering/prompts/systematic-debugging.txt +0 -0
- package/upstream/tests/skill-triggering/prompts/test-driven-development.txt +0 -0
- package/upstream/tests/skill-triggering/prompts/writing-plans.txt +0 -0
- package/upstream/tests/skill-triggering/run-all.sh +0 -0
- package/upstream/tests/skill-triggering/run-test.sh +0 -0
- package/upstream/tests/subagent-driven-dev/go-fractals/design.md +0 -0
- package/upstream/tests/subagent-driven-dev/go-fractals/plan.md +0 -0
- package/upstream/tests/subagent-driven-dev/go-fractals/scaffold.sh +0 -0
- package/upstream/tests/subagent-driven-dev/run-test.sh +0 -0
- package/upstream/tests/subagent-driven-dev/svelte-todo/design.md +0 -0
- package/upstream/tests/subagent-driven-dev/svelte-todo/plan.md +0 -0
- package/upstream/tests/subagent-driven-dev/svelte-todo/scaffold.sh +0 -0
- package/custom/skills/test-skills/rules/Directory_and_Naming_Convention.md +0 -257
|
@@ -39,8 +39,8 @@ function parseLog(filePath) {
|
|
|
39
39
|
if (!user || user === '-' || user === '') continue;
|
|
40
40
|
|
|
41
41
|
const timestamp = cols[0] || '';
|
|
42
|
-
const command
|
|
43
|
-
const ticket
|
|
42
|
+
const command = cols[6] || '';
|
|
43
|
+
const ticket = cols[9] || '';
|
|
44
44
|
|
|
45
45
|
const date = timestamp.split(' ')[0]; // dd/MM/yyyy
|
|
46
46
|
|
|
@@ -74,10 +74,10 @@ function calcScore(u) {
|
|
|
74
74
|
if (events === 0) return 0;
|
|
75
75
|
|
|
76
76
|
// Gate aggregation
|
|
77
|
-
const gateStarted
|
|
78
|
-
const gateApproved
|
|
79
|
-
const ticketsStarted
|
|
80
|
-
const ticketsCompleted
|
|
77
|
+
const gateStarted = new Set(); // gate numbers
|
|
78
|
+
const gateApproved = new Set();
|
|
79
|
+
const ticketsStarted = new Set();
|
|
80
|
+
const ticketsCompleted = new Set(); // gate4.approved or gate5.start
|
|
81
81
|
|
|
82
82
|
for (const g of gateCmds) {
|
|
83
83
|
const hasTicket = g.ticket && g.ticket !== '-' && g.ticket !== '';
|
|
@@ -97,9 +97,9 @@ function calcScore(u) {
|
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
const hasUse
|
|
101
|
-
const hasPrompt
|
|
102
|
-
const hasGuide
|
|
100
|
+
const hasUse = USE_CMDS.has('use') && rawCmds.has('use');
|
|
101
|
+
const hasPrompt = rawCmds.has('prompt');
|
|
102
|
+
const hasGuide = rawCmds.has('guide') || rawCmds.has('guideline') || rawCmds.has('sync-skills');
|
|
103
103
|
const hasGateHighApproved = gateApproved.has(3) || gateApproved.has(4);
|
|
104
104
|
|
|
105
105
|
// Score 5: gate 3-5 approved + ≥ 3 tickets completed
|
|
@@ -122,9 +122,9 @@ function calcScore(u) {
|
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
const SCORE_LABELS = [
|
|
125
|
-
'
|
|
126
|
-
'
|
|
127
|
-
'
|
|
125
|
+
'Trong tuần không sử dụng lần nào',
|
|
126
|
+
'Rất ít dùng',
|
|
127
|
+
'Có sử dụng nhưng chưa bắt đầu workflow nào cả',
|
|
128
128
|
'Dùng có workflow',
|
|
129
129
|
'Hoàn thành workflow',
|
|
130
130
|
'Sử dụng thường xuyên workflow',
|
|
@@ -149,19 +149,19 @@ function buildRow(email, u) {
|
|
|
149
149
|
.sort();
|
|
150
150
|
|
|
151
151
|
// Compact gate summary
|
|
152
|
-
const startedGates
|
|
152
|
+
const startedGates = [...new Set(gateCmds.filter(g => g.type === 'start').map(g => g.gateNum))].sort((a, b) => a - b);
|
|
153
153
|
const approvedGates = [...new Set(gateCmds.filter(g => g.type === 'approved').map(g => g.gateNum))].sort((a, b) => a - b);
|
|
154
154
|
|
|
155
|
-
const ticketsStarted
|
|
156
|
-
const ticketsApproved
|
|
155
|
+
const ticketsStarted = [...new Set(gateCmds.filter(g => g.type === 'start' && g.ticket && g.ticket !== '-').map(g => g.ticket))];
|
|
156
|
+
const ticketsApproved = [...new Set(gateCmds.filter(g => g.type === 'approved' && g.ticket && g.ticket !== '-').map(g => g.ticket))];
|
|
157
157
|
const ticketsCompleted = [...new Set(gateCmds.filter(g =>
|
|
158
158
|
((g.type === 'approved' && g.gateNum >= 4) || (g.gateNum === 5 && g.type === 'start'))
|
|
159
159
|
&& g.ticket && g.ticket !== '-'
|
|
160
160
|
).map(g => g.ticket))];
|
|
161
161
|
|
|
162
|
-
const gateStartStr
|
|
162
|
+
const gateStartStr = startedGates.length ? `G${startedGates.join(',')} / ${ticketsStarted.length} ticket(s)` : '';
|
|
163
163
|
const gateApprovedStr = approvedGates.length ? `G${approvedGates.join(',')} / ${ticketsApproved.length} ticket(s)` : '';
|
|
164
|
-
const ticketsStr
|
|
164
|
+
const ticketsStr = ticketsCompleted.length ? ticketsCompleted.join(', ') : '';
|
|
165
165
|
|
|
166
166
|
// Notes
|
|
167
167
|
const onlyExploreCmds = [...rawCmds].every(c => EXPLORE_CMDS.has(c));
|
|
@@ -207,20 +207,20 @@ async function writeExcel(rows, outputPath, sheetLabel, fromLabel, toLabel) {
|
|
|
207
207
|
const sheet = workbook.addWorksheet(`Score ${sheetLabel}`);
|
|
208
208
|
|
|
209
209
|
sheet.columns = [
|
|
210
|
-
{ key: 'no',
|
|
211
|
-
{ key: 'email',
|
|
212
|
-
{ key: 'events',
|
|
213
|
-
{ key: 'activeDays',
|
|
214
|
-
{ key: 'keyCommands',
|
|
215
|
-
{ key: 'gateStart',
|
|
210
|
+
{ key: 'no', width: 5 },
|
|
211
|
+
{ key: 'email', width: 30 },
|
|
212
|
+
{ key: 'events', width: 8 },
|
|
213
|
+
{ key: 'activeDays', width: 10 },
|
|
214
|
+
{ key: 'keyCommands', width: 40 },
|
|
215
|
+
{ key: 'gateStart', width: 24 },
|
|
216
216
|
{ key: 'gateApproved', width: 24 },
|
|
217
|
-
{ key: 'tickets',
|
|
218
|
-
{ key: 'depthScore',
|
|
219
|
-
{ key: 'depthLabel',
|
|
220
|
-
{ key: 'impactScore',
|
|
221
|
-
{ key: 'impactLabel',
|
|
222
|
-
{ key: 'totalScore',
|
|
223
|
-
{ key: 'notes',
|
|
217
|
+
{ key: 'tickets', width: 44 },
|
|
218
|
+
{ key: 'depthScore', width: 8 },
|
|
219
|
+
{ key: 'depthLabel', width: 28 },
|
|
220
|
+
{ key: 'impactScore', width: 8 },
|
|
221
|
+
{ key: 'impactLabel', width: 18 },
|
|
222
|
+
{ key: 'totalScore', width: 8 },
|
|
223
|
+
{ key: 'notes', width: 54 },
|
|
224
224
|
];
|
|
225
225
|
|
|
226
226
|
const border = {
|
|
@@ -232,9 +232,9 @@ async function writeExcel(rows, outputPath, sheetLabel, fromLabel, toLabel) {
|
|
|
232
232
|
sheet.addRow([`AI Flow Kit — Weekly Score Report: ${fromLabel} – ${toLabel}`]);
|
|
233
233
|
sheet.mergeCells('A1:N1');
|
|
234
234
|
const title = sheet.getCell('A1');
|
|
235
|
-
title.font
|
|
235
|
+
title.font = { bold: true, size: 13, color: { argb: 'FF1F3864' } };
|
|
236
236
|
title.alignment = { vertical: 'middle', horizontal: 'center' };
|
|
237
|
-
title.fill
|
|
237
|
+
title.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FFD6DCE4' } };
|
|
238
238
|
sheet.getRow(1).height = 28;
|
|
239
239
|
|
|
240
240
|
// Header row
|
|
@@ -247,10 +247,10 @@ async function writeExcel(rows, outputPath, sheetLabel, fromLabel, toLabel) {
|
|
|
247
247
|
const hRow = sheet.addRow(HEADERS);
|
|
248
248
|
hRow.height = 36;
|
|
249
249
|
hRow.eachCell(cell => {
|
|
250
|
-
cell.fill
|
|
251
|
-
cell.font
|
|
250
|
+
cell.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FF4472C4' } };
|
|
251
|
+
cell.font = { bold: true, color: { argb: 'FFFFFFFF' }, size: 11 };
|
|
252
252
|
cell.alignment = { vertical: 'middle', horizontal: 'center', wrapText: true };
|
|
253
|
-
cell.border
|
|
253
|
+
cell.border = border;
|
|
254
254
|
});
|
|
255
255
|
|
|
256
256
|
// Score → row color
|
|
@@ -276,7 +276,7 @@ async function writeExcel(rows, outputPath, sheetLabel, fromLabel, toLabel) {
|
|
|
276
276
|
const fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: COLORS[row.depthScore] || 'FFFFFFFF' } };
|
|
277
277
|
r.eachCell({ includeEmpty: true }, (cell, col) => {
|
|
278
278
|
cell.border = border;
|
|
279
|
-
cell.fill
|
|
279
|
+
cell.fill = fill;
|
|
280
280
|
cell.alignment = (col <= 4 || (col >= 9 && col <= 13))
|
|
281
281
|
? { vertical: 'middle', horizontal: 'center' }
|
|
282
282
|
: { vertical: 'middle', horizontal: 'left', wrapText: false };
|
|
@@ -286,7 +286,7 @@ async function writeExcel(rows, outputPath, sheetLabel, fromLabel, toLabel) {
|
|
|
286
286
|
r.getCell(13).value = { formula: `I${excelRowNum}+K${excelRowNum}` };
|
|
287
287
|
});
|
|
288
288
|
|
|
289
|
-
sheet.views
|
|
289
|
+
sheet.views = [{ state: 'frozen', ySplit: 2 }];
|
|
290
290
|
sheet.autoFilter = { from: 'A2', to: 'N2' };
|
|
291
291
|
|
|
292
292
|
await workbook.xlsx.writeFile(outputPath);
|
|
@@ -295,17 +295,14 @@ async function writeExcel(rows, outputPath, sheetLabel, fromLabel, toLabel) {
|
|
|
295
295
|
|
|
296
296
|
// ── Canonical user list (fixed order) ─────────────────────────────────────
|
|
297
297
|
const CANONICAL_USERS = [
|
|
298
|
-
'anhtt@relipasoft.com',
|
|
299
298
|
'hoangdv@relipasoft.com',
|
|
300
299
|
'chinhtt@relipasoft.com',
|
|
301
|
-
'hieptv@relipasoft.com',
|
|
302
300
|
'phongnx@relipasoft.com',
|
|
303
301
|
'dungha@relipasoft.com',
|
|
304
302
|
'thangnv@relipasoft.com',
|
|
305
303
|
'nguyenlt@relipasoft.com',
|
|
306
304
|
'thuongvv@relipasoft.com',
|
|
307
305
|
'yenvtb@relipasoft.com',
|
|
308
|
-
'tructh@relipasoft.com',
|
|
309
306
|
'thainq@relipasoft.com',
|
|
310
307
|
'tuoittx@relipasoft.com',
|
|
311
308
|
'hungdv@relipasoft.com',
|
|
@@ -314,7 +311,7 @@ const CANONICAL_USERS = [
|
|
|
314
311
|
'huynq@relipasoft.com',
|
|
315
312
|
'thinhvq@relipasoft.com',
|
|
316
313
|
'banv@relipasoft.com',
|
|
317
|
-
'
|
|
314
|
+
'duongnt1@relipasoft.com',
|
|
318
315
|
'anhnt@relipasoft.com',
|
|
319
316
|
'khanhdd@relipasoft.com',
|
|
320
317
|
'hieunv@relipasoft.com',
|
|
@@ -322,9 +319,7 @@ const CANONICAL_USERS = [
|
|
|
322
319
|
|
|
323
320
|
// Log email → canonical email (for slight mismatches)
|
|
324
321
|
const LOG_EMAIL_ALIAS = {
|
|
325
|
-
|
|
326
|
-
'duongnt1@relipasoft.com': 'duongnt@relipasoft.com',
|
|
327
|
-
'anhtt2@relipasoft.com': 'anhtt@relipasoft.com',
|
|
322
|
+
|
|
328
323
|
};
|
|
329
324
|
|
|
330
325
|
const EMPTY_USER = (email) => ({
|
|
@@ -343,15 +338,14 @@ const EMPTY_USER = (email) => ({
|
|
|
343
338
|
? [dateMatch[1].replace(/-/g, '/'), dateMatch[2].replace(/-/g, '/')]
|
|
344
339
|
: ['?', '?'];
|
|
345
340
|
const sheetLabel = dateMatch
|
|
346
|
-
? `${dateMatch[1].slice(0,5).replace(/-/g,'.')}-${dateMatch[2].slice(0,5).replace(/-/g,'.')}.${dateMatch[1].slice(6,10)}`
|
|
341
|
+
? `${dateMatch[1].slice(0, 5).replace(/-/g, '.')}-${dateMatch[2].slice(0, 5).replace(/-/g, '.')}.${dateMatch[1].slice(6, 10)}`
|
|
347
342
|
: stem;
|
|
348
343
|
|
|
349
|
-
const logFile
|
|
344
|
+
const logFile = path.join(__dirname, '..', 'tellog', stem);
|
|
350
345
|
const outputFile = path.join(__dirname, '..', 'tellog', `${stem}.xlsx`);
|
|
351
346
|
|
|
352
347
|
const rawUsers = parseLog(logFile);
|
|
353
348
|
|
|
354
|
-
// Re-key log users using alias map (tructh → tructth, duongnt1 → duongnt)
|
|
355
349
|
const users = {};
|
|
356
350
|
for (const [logEmail, data] of Object.entries(rawUsers)) {
|
|
357
351
|
const canonical = LOG_EMAIL_ALIAS[logEmail] || logEmail;
|
package/scripts/detect.js
CHANGED
|
File without changes
|
package/scripts/doctor.js
CHANGED
|
File without changes
|
|
File without changes
|
package/scripts/guide.js
CHANGED
|
File without changes
|
|
File without changes
|
|
@@ -263,6 +263,7 @@ function buildContextPrompt(ctx, taskState) {
|
|
|
263
263
|
lines.push('');
|
|
264
264
|
lines.push('DO NOT wait for the developer to ask. START NOW.');
|
|
265
265
|
lines.push('If you have not started automatically, begin as soon as the developer types **"start"**.');
|
|
266
|
+
lines.push('(If a later ticket switch does not seem to trigger this — e.g. `ak use` was run in another terminal while this chat was already open — the developer can run **`/coding`** to load it manually.)');
|
|
266
267
|
}
|
|
267
268
|
|
|
268
269
|
lines.push('</ACTIVE_TASK>');
|
|
File without changes
|
package/scripts/init.js
CHANGED
|
@@ -305,6 +305,11 @@ async function setupClaudeCommands(projectDir) {
|
|
|
305
305
|
dest: 'create-testcase.md',
|
|
306
306
|
description: 'QA 4-Gate TestCase Creation Workflow — converts raw requirements (SRS/Backlog/Jira/Spec file) into a complete, execution-ready Test Case set following the QA Workflow standard: Gate 1 (requirement & risk analysis), Gate 2 (scenario building), Gate 3 (detailed test case design), Gate 4 (review & optimization). Reads QA sub-skills from .claude/skills/test-skills/.',
|
|
307
307
|
},
|
|
308
|
+
{
|
|
309
|
+
src: path.join(PKG_DIR, 'custom', 'templates', 'shared', 'coding-workflow.md'),
|
|
310
|
+
dest: 'coding.md',
|
|
311
|
+
description: 'Manual trigger for the DEV 5-Gate Coding Workflow (bug-fix / feature / refactor / investigation / documentation). Use this when the SessionStart auto-start message was missed — e.g. a ticket was loaded with `ak use` while this chat session was already open.',
|
|
312
|
+
},
|
|
308
313
|
];
|
|
309
314
|
|
|
310
315
|
for (const cmd of commands) {
|
package/scripts/memory.js
CHANGED
|
File without changes
|
package/scripts/prompt.js
CHANGED
|
File without changes
|
package/scripts/remove.js
CHANGED
|
File without changes
|
package/scripts/review.js
CHANGED
|
File without changes
|
|
File without changes
|
package/scripts/task.js
CHANGED
|
File without changes
|
package/scripts/telemetry/cli.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/scripts/update.js
CHANGED
|
File without changes
|
package/scripts/use.js
CHANGED
|
@@ -630,7 +630,6 @@ async function promptForTaskType(detectedDefault) {
|
|
|
630
630
|
{ name: td("🐛 Bug Fix", "Coding", "Fix bugs, crashes, regressions"), value: "bug-fix" },
|
|
631
631
|
{ name: td("✨ Feature", "Coding", "Build new features, user stories"), value: "feature" },
|
|
632
632
|
{ name: td("🔄 Refactor", "Coding", "Improve code without behavior change"), value: "refactor" },
|
|
633
|
-
{ name: td("🔬 Testing", "Testing", "Write tests, QA, coverage"), value: "testing" },
|
|
634
633
|
{ name: td("▶️ Execute Test", "Testing", "Run existing TC scripts (4-gate flow)"), value: "execute" },
|
|
635
634
|
{ name: td("📋 Create Spec", "BA", "Create UC Spec from raw requirements (4-gate BA)"), value: "create-spec" },
|
|
636
635
|
{ name: td("✅ Create TestCase", "QA", "Create Test Cases from requirements (4-gate QA)"), value: "create-testcase" },
|
|
@@ -704,7 +703,6 @@ async function manualContext(prefillId = "") {
|
|
|
704
703
|
{ name: td("🐛 Bug Fix", "Coding", "Fix bugs, crashes, regressions"), value: "bug-fix" },
|
|
705
704
|
{ name: td("✨ Feature", "Coding", "Build new features, user stories"), value: "feature" },
|
|
706
705
|
{ name: td("🔄 Refactor", "Coding", "Improve code without behavior change"), value: "refactor" },
|
|
707
|
-
{ name: td("🔬 Testing", "Testing", "Write tests, QA, coverage"), value: "testing" },
|
|
708
706
|
{ name: td("▶️ Execute Test", "Testing", "Run existing TC scripts (4-gate flow)"), value: "execute" },
|
|
709
707
|
{ name: td("📋 Create Spec", "BA", "Create UC Spec from raw requirements (4-gate BA)"), value: "create-spec" },
|
|
710
708
|
{ name: td("✅ Create TestCase", "QA", "Create Test Cases from requirements (4-gate QA)"), value: "create-testcase" },
|
|
@@ -1103,6 +1101,9 @@ async function suggestNextStep() {
|
|
|
1103
1101
|
console.log(
|
|
1104
1102
|
`\n ${chalk.yellow("Note:")} If the AI does not start automatically, type ${chalk.bold.green('"Gate 1"')} or ${chalk.bold.green('"Analyze ticket"')} to begin.`,
|
|
1105
1103
|
);
|
|
1104
|
+
console.log(
|
|
1105
|
+
` ${chalk.yellow("Already have a chat open?")} A ticket loaded via ${chalk.bold.green("ak use")} is only picked up by a ${chalk.bold("new")} Claude session (SessionStart hook). If you loaded this ticket into an already-running chat, type ${chalk.bold.green('"/coding"')} there to load it manually instead of restarting.`,
|
|
1106
|
+
);
|
|
1106
1107
|
console.log();
|
|
1107
1108
|
}
|
|
1108
1109
|
|
package/scripts/validate.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/upstream/.gitattributes
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/upstream/AGENTS.md
CHANGED
|
File without changes
|
package/upstream/CHANGELOG.md
CHANGED
|
File without changes
|
package/upstream/CLAUDE.md
CHANGED
|
File without changes
|
|
File without changes
|
package/upstream/GEMINI.md
CHANGED
|
File without changes
|
package/upstream/LICENSE
CHANGED
|
File without changes
|
package/upstream/README.md
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/upstream/docs/testing.md
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/upstream/package.json
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/upstream/tests/explicit-skill-requests/prompts/subagent-driven-development-please.txt
CHANGED
|
File without changes
|
|
File without changes
|