Add forgejo_milestone_create tool #20
Closed
opened 2026-08-18 02:34:19 +00:00 by david
·
1 comment
No Branch/Tag specified
main
feature/issue-264/verify-the-vision-tool-live-against-the-deepseek-a
feature/issue-263/list-the-vision-extension-in-the-repo-root-readme
feature/issue-262/write-extensions-vision-readme-md-the-10-section-p
feature/issue-261/wire-the-vision-extension-into-package-json-manife
feature/issue-260/implement-extensions-vision-index-ts-factory-regis
feature/issue-258/implement-extensions-vision-src-tool-ts-the-vision
feature/issue-257/implement-extensions-vision-src-client-ts-request
feature/issue-256/implement-extensions-vision-src-usage-ts-usage-map
feature/issue-255/implement-extensions-vision-src-images-ts-read-val
feature/issue-254/implement-extensions-vision-src-config-ts-env-reso
feature/issue-253/implement-extensions-vision-src-errors-ts-toolerro
feature/issue-252/penpot-add-text-stages-zero-area-auto-width-text-p
feature/issue-216/add-the-penpot-skill-and-extension-to-the-repo-roo
feature/issue-217/register-the-penpot-tests-in-npm-test-complete-the
feature/issue-215/write-the-penpot-skill-md-core-workflow-token-conv
feature/issue-214/implement-and-run-fetch-penpot-docs-mjs-and-commit
feature/issue-213/validate-screenshot-reconstruction-against-the-liv
feature/issue-212/add-the-image-to-design-workflow-to-skills-penpot
feature/issue-211/validate-svg-import-icon-and-illustration-against
feature/issue-210/implement-the-penpot-add-svg-tool-with-svg-raw-fal
feature/issue-209/implement-the-svg-to-shapes-converter-in-src-svg-t
feature/issue-208/validate-component-instancing-against-the-live-ins
feature/issue-207/implement-penpot-instance-component-with-id-remapp
feature/issue-206/author-and-commit-the-component-library-artifact-u
feature/issue-205/implement-file-library-linking-and-validate-the-ex
feature/issue-204/implement-penpot-export-library-sse-uri-plus-artif
feature/issue-203/implement-penpot-import-library-multipart-upload-p
feature/issue-202/implement-the-transit-decoder-and-sse-stream-parse
feature/issue-201/validate-a-full-composed-screen-one-commit-one-rev
feature/issue-200/implement-penpot-add-image-with-media-upload
feature/issue-199/implement-asset-reference-resolution-plus-penpot-a
feature/issue-198/implement-penpot-add-frame-with-auto-layout-props
feature/issue-197/validate-asset-creation-atomicity-and-write-safety
feature/issue-196/implement-the-designated-target-write-guard-with-a
feature/issue-195/implement-penpot-commit-with-revn-tracking-conflic
feature/issue-194/implement-the-staged-changeset-store-and-the-colou
feature/issue-193/validate-read-primitives-against-the-live-penpot-i
feature/issue-192/implement-the-penpot-list-library-tool-with-name-t
feature/issue-191/implement-the-penpot-get-file-tool-pages-objects-a
feature/issue-190/implement-the-penpot-list-projects-tool-teams-and
feature/issue-189/implement-the-penpot-whoami-tool-and-wire-the-exte
feature/issue-188/implement-the-rpc-client-and-error-decoding-in-src
feature/issue-187/implement-penpot-url-penpot-token-resolution-in-sr
feature/issue-186/scaffold-the-penpot-extension-directory-and-regist
feature/issue-172/add-end-to-end-main-tests-for-the-fj-rg-tool-state
feature/issue-171/make-reminder-report-dynamic-install-skip-counts-r
feature/issue-170/wire-settings-json-filter-rewrite-into-dedupeandre
feature/issue-169/implement-buildpackagefilters-with-exhaustive-unit
feature/issue-168/refactor-preflight-to-skip-warn-for-missing-fj-rg
feature/issue-167/add-fj-rg-tool-detection-helpers-rgavailable-detec
feature/issue-148/reconcile-design-md-and-implementation-plan-with-t
feature/issue-146/verify-extension-load-behavior-with-and-without-mo
feature/issue-145/write-extensions-mongodb-readme-md
feature/issue-144/write-tool-description-promptsnippet-guidance-for
feature/issue-143/implement-index-ts-async-factory-lifecycle-with-te
feature/issue-142/implement-the-mongo-list-collections-tool-with-uni
feature/issue-141/implement-the-mongo-count-tool-with-unit-tests
feature/issue-140/implement-the-mongo-find-tool-with-unit-tests
feature/issue-139/implement-src-errors-ts-with-unit-tests-toolerror
feature/issue-138/implement-src-serialize-ts-with-unit-tests-ejson-t
feature/issue-136/implement-src-env-ts-with-unit-tests-mongodb-uri-r
feature/issue-135/register-the-mongodb-extension-in-the-repo-root-pa
feature/issue-133/initialize-the-extensions-mongodb-package-package
feature/issue-116/src-actions-ts-downloadrunlogs-zip-guarded-unzip-c
feature/issue-115/src-actions-ts-downloadjoblog-cache-first-attempt
feature/issue-114/src-actions-ts-metadata-queries-listactionruns-get
feature/issue-113/src-actionscache-ts-cache-paths-cache-first-read-w
feature/issue-112/add-zip-extraction-dependency-adm-zip-vs-yauzl
feature/issue-111/tracking-forgejo-actions-tooling-read-only-runs-jo
feature/issue-93/add-unit-tests-for-scripts-local-install-mjs-node
feature/issue-92/validate-install-local-end-to-end-on-the-dev-machi
feature/issue-90/implement-pi-registration-with-url-dedupe-and-relo
feature/issue-89/validate-install-local-from-a-scratch-clone-fresh
feature/issue-88/implement-git-pull-and-npm-install-steps-in-script
feature/issue-74/write-victorialogs-readme-md-and-reconcile-design
feature/issue-73/wire-up-index-ts-extension-factory-and-register-al
feature/issue-72/implement-logs-facets-tool-src-tools-facets-ts
feature/issue-71/implement-logs-hits-tool-src-tools-hits-ts
feature/issue-70/implement-logs-search-tool-src-tools-search-ts
feature/issue-69/implement-parsejsonlines-helper-in-src-client-ts
feature/issue-68/implement-victorialogsrequest-in-src-client-ts
feature/issue-67/implement-resolvebaseurl-in-src-env-ts
feature/issue-66/implement-totoolerror-in-src-errors-ts
feature/issue-65/implement-src-defaults-ts-shared-constants-and-app
feature/issue-64/scaffold-the-victorialogs-pi-extension-project
feature/issue-53/skip-issue-creation-for-chore-documentation-commit
feature/issue-45/fix-local-install-preflight-env-var-requirements-s
feature/issue-41/add-npm-run-local-install-script-to-update-and-ins
feature/issue-26/cross-reference-forgejo-list-milestones-from-issue
feature/issue-25/add-forgejo-milestone-delete-tool
feature/issue-24/add-forgejo-milestone-close-and-forgejo-milestone
feature/issue-23/add-forgejo-milestone-edit-tool
feature/issue-22/add-forgejo-milestone-view-tool
feature/issue-21/add-forgejo-list-milestones-tool
feature/issue-20/add-forgejo-milestone-create-tool
feature/issue-18/add-forgejo-label-create-tool
feature/issue-29/bug-forgejo-issue-create-view-edit-close-etc-crash
No results found.
Labels
No labels
bug
chore
documentation
enhancement
feature
ready
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set
Reference
david/pi-extensions-and-skills#20
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Add a new
src/milestones.tsmodule with acreateMilestone()function and register aforgejo_milestone_createtool, so Forgejo milestones can be created directly from the extension (today only issues/PRs/labels are covered).Background
The
forgejoextension (extensions/forgejo/in this repo) wraps the Forgejo REST API (/api/v1). It follows a layered architecture:src/api.ts(forgejoApiCall()HTTP wrapper returningResult<T, ApiError>), per-domain function files (src/issues.ts,src/pulls.ts), andsrc/index.ts(tool registration with TypeBox schemas,promptSnippet/promptGuidelines, sharedtargetOverrides).Milestones are a distinct resource from issues/PRs in the Forgejo API, so this introduces a new
src/milestones.tsfile (mirroring the existingissues.ts/pulls.tssplit) rather than folding milestone code intoissues.ts. This is the first of several issues adding full milestone CRUD; it establishes theForgejoMilestoneinterface and file that later issues (list/view/edit/close/reopen/delete) build on. It has no dependency on other issues in this batch.Implementation Details
Confirmed Forgejo/Gitea API v1 contract (Codeberg swagger,
v16.0.0-dev):POST /repos/{owner}/{repo}/milestones(operationIdissueCreateMilestone)Request body (
CreateMilestoneOption):Response (
201,Milestone):Errors:
404(repo not found).Files to create/change:
New
src/milestones.ts:ForgejoMilestoneinterface (fields above).CreateMilestoneOptionsinterface:{ title: string; description?: string; due_on?: string; state?: "open" | "closed" }.milestonePath(target: ForgejoTarget, id?: number): stringhelper mirroringissuePath()insrc/issues.ts(builds/repos/{owner}/{repo}/milestonesor.../milestones/{id}).createMilestone(target: ForgejoTarget, options: CreateMilestoneOptions): Promise<Result<ForgejoMilestone, ApiError>>—POSTviaforgejoApiCall, body viaomitUndefined(options).src/index.ts:createMilestone,ForgejoMilestonefrom./milestones.formatMilestone(milestone: ForgejoMilestone, action: string): { text: string; details: Record<string, unknown> }helper, mirroringformatIssue()/formatPullRequest()— include id, title, state, description, due_on, open/closed issue counts.forgejo_milestone_createtool:label: "Create Milestone"promptSnippet: "Create a Forgejo milestone"promptGuidelines: e.g.["Use forgejo_list_milestones afterwards to confirm the new milestone's id for use in forgejo_issue_create/forgejo_pr_create."]parameters:Type.Object({ ...targetOverrides, title: Type.String(...), description: Type.Optional(Type.String(...)), due_on: Type.Optional(Type.String({ description: "Due date (ISO 8601)" })), state: Type.Optional(Type.Union([Type.Literal("open"), Type.Literal("closed")])) })execute: resolve target, callcreateMilestone, returntoolSuccess/toolErrorusingformatMilestone.tests/milestones.test.ts(new file): unit tests forcreateMilestone()mockingforgejoApiCall— verify URL (/repos/{owner}/{repo}/milestones), methodPOST, body payload (optional fields omitted when undefined), and success/errorResultpropagation.Tool-registration test file (
tests/index.test.tsortests/tools.test.ts): add coverage forforgejo_milestone_create— schema shape and execute() success/error paths.Acceptance Criteria
src/milestones.tsexists withForgejoMilestone,CreateMilestoneOptions, andcreateMilestone().createMilestone()callsPOST /repos/{owner}/{repo}/milestoneswith the correct body and returnsResult<ForgejoMilestone, ApiError>.forgejo_milestone_createtool is registered withtitlerequired,description/due_on/stateoptional, plustargetOverrides.id,title, andstatein the tool result text anddetails.createMilestone()and the tool registration/execution path.npm testandnpm run checkpass with no regressions.Test Plan
npm test— new tests forcreateMilestone()andforgejo_milestone_createpass; full suite green.npm run check— lint/typecheck passes.forgejo_milestone_createwithtitle: "v1.0",description: "First release"; verify a milestone appears in the Forgejo web UI with the returned id.pi-loop opened and merged a pull request for this issue: #34