Dɔwɔwɔ le git nudzraɖoƒe
Pro le wò repository ɖeka me dɔwɔwɔ gbegbe dɔwɔla si ɖe dɔ le kodifia me ɖe — eɖe wò ƒe fidiamewo ɖe, eye wòava ɖe dɔ le wo dzi be wòna ɖe wo ɖa ɖa.
Woɖe axa sia gɔme to mɔ̃ dzi be wòanɔ bɔbɔe. Eŋlisigbe me gbãtɔae nye gɔmeɖeɖe si sɔ.
Ŋutɔɖeɖe ɖe repository ɖekea ɖe ɖeɖe si
?git, alo ve Git tshia si le toolbar me la, ɖea ɖeka ɖe nye provider:
GitHub, GitLab, alo Gitea/Forgejo — si le Codeberg kple self-hosted instances lɛ gbɔ.
Eɖoa personal access token si ƒe ta ɖe ɖeka, repository ɖeka kple branch ɖeka ŋu. Repository si ƒe
ɖe ɖeke ɖe eɖome le Nostr dzi eɖe eƒe adrese ta ɖeɖe be wòɖeɖe le eŋu be wòɖeɖe ta.
Ènye mèle nuɖomewoɖewo kpɔkpɔ ɖe nya sia me la, gake ènye maseɖe be nàɖo nya kɔɖeɖe si ấy ɖe nya sia me la o. Ðo token la eye ɖu ɖeka. Ŋumeti sia ƒe dɔwɔwɔwo si wòava ɖe nya ɖe nya me la ɖe mɔ me ɖe nya me ɖe.Nymbot ɖe forge la ɖe e ɖe be nu kae nuɖodzi (token) la le ɖe dzesi na, eye wòɖoa eɖome ɖe lala (list) si nàɖe ɖe. Womɔna ɖe nu sia ɖesiaɖe ɖe eƒe xɔxɔ (branch) si le tɔm nu, eye wòɖoa ɖeka ɖeka ɖe chat sia me. Nu si ɖe ɖekea be wònye si la, wòɖoa eɖome be wònye si, eye wòade nu si nàɖe ɖe ɖeka mademɔ̃. Ese (request) sia ƒo tso wòƒe meɖeɖe (device) tso ɖe forge la gbɔ ɖaa — wòɖe Nymbot worker la ƒe asi me o — be nuɖodzi (token) la nado gɔme ɖeka aɖe si wòɖoa ɖaa o. Forge si ɖekaɖe ɖe ɖeɖe (self-hosted) si ɖua cross-origin requests la, wòanya dzesi ɖeka aɖe o; ɖo repository la ɖe wò ɖe wòɖeɖe (by hand), eye nu sia dzi la le ɖeka ɖe.
Ŋku ɖe ɖe ŋu la, chip la ɖe gɔme ɖe repository ƒe ŋkɔ la, eye xɔxɔ siwo wo ɖe kple a
Pro model eɖeɖe dɔwɔwɔ la le eyatɔ repository ƒe gɔmeɖodziɖe me.
?git disconnect ɖoa nya la. Kpɔ kpɔkpɔ ɖe ɖe nya siwo le ɖan ɖe gbɔ na eƒe kpeɖeɖewo ƒe ƒe kpeɖeɖe ƒe dzesi me
eɖoa token la ɖe ɖe, gake eɖoa kpeɖeɖe la le ɖom, eye eɖoa ɖe eŋu be eɖe be eɖe token bubu ɖe vevie wò.
Nostr dzi wole ɖamɖamƒewo ɖeɖe.
Dɔwɔnuwo ɖekawo ɖe nu leɖeɖe me ɖe Nostr dzi, ɖe forge ɖeka dzi ɖekae gbeɖe, le wòɖo ɖe NIP-34 — nyaɖuɖu si le ɖeɖe la ƒe megbe ngit ɖe gitworkshop. Ŋutinya la nye Nostr dɔwɔnu si kplɔa projek la ƒe ŋkɔ, eƒe dɔwɔlawo, tɔtrɔwo siwo nya eƒe ɖokui kple dɔwɔnuwo, eye wònye URLs siwo gbɔ wòɖe aƒe le. Dɔwɔnu evelia la la ɖe nu si gbɔ veviame branch ɖeka ɖeka le hafi le.
Lema ɖe ʋyi naddr ɖe alo a nostr:// ɖeka ɖe nyawo le repository ƒe ƒe hã me eye
ɖu nu Kpɔ̃ nu si wòɖo ɖe eme la. Nymbot reads the announcement off the relays and fills the
form in: the git host it is cloned from, the repository there, and the branch the project
itself says is current. You still add a token for that host, because Nostr carries the
announcement and the git server carries the code.
Enye be rule la nye be eƒe gbɔgbɔ si wòɖu ɖe eƒe ɖokui me lae. Repository si ƒe clone URL le GitHub, GitLab, Gitea alo Forgejo dzi — eye wòɖu eɖokui me tɔwo ɖe eŋu ha — nye nu si Nymbot ate ŋu ɖo ɖe ɖe. Enye eɖokui si wòɖu ɖe eƒe ɖokui me ɖe eŋu ɖe... git:// am ƒe ssh la ɖe anyi kple HTTP API bubu aɖe si wòanya ɖe nya siwo le eme ya, eye
Nymbot ɖe nya la gbãtɔ rather than si wòanya ɖe nya la ɖe ɖeka ko. Ne host la ɖo eme ɖeleɖe la, provider la nye
kpɔkpɔ ɖe eƒe ŋkɔ dzi, eye wòate ŋe ɖe nu ɖo eɖokui tso eɖokui nya ɖe nya gbãtɔ me gbãtɔ le nuɖuɖu me.
Ŋkpɔkpɔ si wotsɔ ɖe nya sia me nyatakpeɖeɖe la ɖe ɖeɖe ɖe. ngit in the list, and replies call it by the name it announces rather than by its path on the mirror.
Ebla nuwò le dzigbe dzea?
A message in repo context runs as a small agent rather than a single completion. The model can list directories, read files and search the tree, then answer using what it actually found — so "why does the retry loop give up early" is answered from your code, not from a guess about code that looks like yours.
Eƒe ɖeka si nàɖo eŋu la, eƒe ɖeka si le eƒe ɖeesi (head) gbãtɔ me la, eɖea nu.
ɖe server ɖuɖu le gbɔ Eɖoɖo na chat la, eɖe kple eɖe xɔa be eawɔ dɔ ɖe wò kɔɖi (code) la me, abe dzesiwo (tests) wo te, ɖe Nymbot sève (server) ɖeka dzi. ʋeɖeɖe ɖeka ɖeka ɖeɖe xɔa be èaɖo dzesi e.
Ŋkɔɖeɖewo ɖoa ɖe dzi ɖeya
?git writes on adds the ability to commit files, create branches and open pull
or merge requests. Off by default, and worth leaving off until you want it.
With writes on, ask for a change and you get a branch and a pull request to review rather than a patch pasted into chat: each task works on eƒe ɖeka ɖekaBiblia bubu ɖe wò ƒe gbɔgbɔ si nɔa dzesi me o, eyesi wòɖo ɖe nɔa dzesi me megbe o, eye nye gbɔgbɔ si nàɖo ɖe eŋu la, eye wòɖe ɖe ɖe dzesi me eye wòɖe ɖe ɖe ɖe nàɖe eŋu la.
A run ƒeɖeɖewo va ɖe ɖeka ta le xɔxɔ ɖeka me la, ɖe run ƒe ɖokoɖoko me alo ne model la ɖo be dɔwɔɖea ɖe ɖe ɖe. Ne èlɔ̃ be wòkpɔ wo gbãtɔ gbâɖe ta la, ɖu ɖe ɖeŋu me Tetã m'aɖe wòade nu o. for that repository. The run then holds its changes back, the reply shows them as a diff, and Lãɖa wɔawo ɖe nya nya ɖeɖe ɖia le... gbãtɔ me Dzeɖe ɖoa wo ɖe anyi. Dɔwɔwɔ la ɖo agbeɖeɖe.
Dɔwɔnu ɖeka ɖe ɖeka ƒe ɖeka
ɖe Kpɔkpɔ ɖeka ɖeka ɖeka ɖo agbagba ɖeka ɖeka me le, siʋe nye ɖeka ɖekea gbɔ gbɔɖeka ɖeka me la
ɖeɖe ɖidi alo ɖe ɖeka ɖekea ɖe ɖeɖe, eye wònye dɔwɔwɔ si le kplɔ̃ si ɖokui ƒe nya la me, si nye
nymbot/ and a short id. Nymbot makes it from the head of the working branch
when the task makes its first commit, so a task that only reads makes no branch at all.
The working branch itself is not touched, which is why several tasks can write to the same
repository at once instead of waiting their turn.
Duãla la xong la, Nymbot ɖaya ƒe nuɖuɖu? Ne wòɖo xong ɖoa. Pull request ɖeɖe ɖe nye gbɔgbɔe nye ɖokui; ɖe ɖeka ɖe nya kple ɖeka ɖe nya la me ɖoa ɖeka ƒe ɖuɖumegbe (Merge) ƒe nɔnɔme le ɖeɖi ƒe nuɖuɖu me; Xɔ ɖe nɔƒe la ɖokui bubu bubu ɖo. Eye si wòɖo la le Settings me, wònye Blɔ̃ vaɖeɖe si wòɖo dɔ la la xong le..., and each repository can choose differently in its own form. If the forge has no API for pull requests Nymbot can use, or it refuses one, the branch is left as it is and the reply says so.
Esuɖeɖe la ɖe siɖu la le... PR ɖeɖe ɖe, Dome kple ɖu, eye Tasks pane la ɖe nya ɖe ta kple eƒe tɔxɔ̃ la. Ne eƒe tɔxɔ̃ la le dɔ wɔm la, eƒe card la, Tasks pane la kple nya siwo ɖe be nu kae le dɔ wɔm la ɖe nya ɖe ta na ƒe branche la tso tso eɖo ɖe asi la nu, le nuɖeɖe siame nuɖeɖe ɖeka be wòɖo ɖe account la me la nu. Tɔxɔ̃ si le dɔ wɔm ɖe nu alo dɔ ŋu le dɔa me ɖeka megbe la ɖoa eƒe branche la ɖe ɖi gɔme, be wòatɔ trɔ, wòatɔ ɖe eŋu alo wòatɔ ɖe eŋu ɖe nu bubuwo be wòatɔ ɖe eŋu ɖe nya la me. Merge nye merge commit si le forge ƒe pull request la me, si le commit Nymbot ɖe ɖi la ŋu, be nya toɖiɖi siwo le ɖe ɖi ɖea la menye be wòatɔ trɔ wo be wòade dɔ me mate ŋu aɖe ɖe wòaɖe aƒe la o. Nuɖeɖe aɖe xɔ nɔ ɖe force-push ƒe dɔ me o. Ne branche la ƒe dɔ kple dɔwɔƒe branche la ƒe dɔ ɖi ɖi ɖe nu la, eɖeɖe la ɖoa eŋu Ɖe PR la be wòɖe ɖe ɖeka eve ɖo Nymbot be ɖe nya ɖa ɖekpe ɖe branch la me, si si ɖe ɖeka ɖe wò kple eɖokui le merge commit sia ƒe nya me ɖe rebasing ƒe nya me o. GitHub kple Gitea alo Forgejo ate ⁶ɖe nya sia; GitLab ya ƒe API bubu alo ɖekaɖeka ɖe nya sia gbɔ o, ɖe nya sia la le ɣeɖe ɖe merge request la me.
Changes to CI and workflow files still wait for your review, exactly as they do without a branch of their own.
Wò dzideɖe ɖo nu si... nymbot/ akawo sia nya nɔ sia me. Nuade si yi ɖe
egbe kplesiɖeɖe sia me la, alo Nymbot ƒe xɔxɔwo ɖe ɖe ɖeɖe in the repository list,
deletes the ones whose pull request is merged or closed, or that are seven days old with
nothing left to merge. A branch is only deleted if it still ends at the commit Nymbot
recorded, so one somebody has pushed to since is left alone, and no other branch is ever
touched. It runs from your device with the token it already sends; the server keeps no
token to do it later.
Dzu ɖe nuãnu sia dzi be wòakpɔ ɖe dɔwɔwɔ ƒe kplɔ̃ (working branch) sia dzi ɖekae. Esia la, dɔwɔwɔ ɖeka la nɔ repository la me ɖeka, eye dɔwɔwɔ evelia si le kplɔ̃ la la dzi la, ɖoɖo ɖe eŋu ɖeɖe esime dɔwɔwɔ evelia la wusue. App ƒe ƒeɖewo la ɖo be wòɖoa dɔ be gbɔ.
Nu si run ɖe ɖe ɖe xɔ ɖe.
Ŋɔŋlɔ si woɖo ɖe wò ʋuɖiɖe (repository) me ɖo nu si wòɖokpɔ: ʋuɖiɖe la, xɔ̃ (branch) la, eye ƒe nuɖodziɖi (file) ɖeka ɖeka. Dome nyawo ɖa ɖe asigbe puts them back — each of those paths is read at the commit the branch stood on before the run and committed as it was. A task that worked on eɖokui ƒe agbagba ɖeka ɖu ɖe wòdɔʋɔ̃ ƒe ƒeɖeɖe la me ɖokui ɖokui, ɖeɖe ɖe nu si le fia la me ɖe ɖokui ɖe: ɖu eɖoa eƒe ƒũɖi ɖe eŋu le ɖem rather.
That is a revert, not a rewrite. Nothing is erased and no history is rewritten: what Nymbot did stays in the log, it is simply no longer the state of the branch. Anyone who pulled in between keeps a checkout that still works.
It costs nothing. Undoing touches no model, so it spends no credits — the access token travels with that one request the way it does with every other, and nothing about the checkpoint is stored anywhere but your own device.
A branch or pull request the run opened is listed and left where it is. Closing somebody's pull request on their behalf is not an undo, and deleting a branch other people may have fetched is not either — do those yourself if you want them gone.
Repo tɔ ƒe dɔwɔwɔ ƒe taƒoƒo ɖe nya ɖe?
A repo task uses up to six model calls per message — look, read, search, answer — each billed at the pinned model's Pro ƒe taƒoƒoɖe ɖeɖe si wòwɔ ɖe la ko wòƒo ɖe, gake nya si wòɖo ɖe ɖe nuŋutɔ ko la, ƒe dɔwɔwɔ la ƒe ƒeɖeɖe la ɖe nu si ŋuti ɖe nya ɖe ɖe nu kɔkɔe la gbɔ.
Aplikasi ɖea gbɔɖe kple dɔwɔwɔwo ƒe ƒeɖe ɖeka ɖeka megbe repo ƒe dɔwɔwɔ ɖeka ɖeka.
Ne dɔwɔnu ɖeka ɖe nuɖeɖe ɖe dɔme la
A repository task is a loop, not a single answer: the model lists a directory, reads a file, searches the tree, reads another, and only then writes. That loop has an allowance — a number of model calls the reply reserved credits for — because an unbounded agent is an unbounded bill.
Ne dɔwɔnu ɖeka ɖe nya si wòɖo eŋu ɖeɖe la, eye dɔ bubu ɖe le ɖom, Nymbot ɖo ɖe, ɖoa e si e le esi le eŋu, eye eɖo eɖe ɖe. Womanyra dɔwɔwɔnu bubu aɖe.
You can also let it carry on. Set a continuation budget in Settings and Nymbot buys another allowance from the same balance when a task runs out, picking up exactly where it stopped rather than re-reading the repository from the beginning. It goes one leg at a time, each leg saying what it cost, and stops the moment the budget is spent, the task is finished, or you press Stop. Choosing “until my balance runs out” is still a ceiling — it is your balance rather than a number you typed.
Dzigbeɖe nye be wòɖo eye wòɖe nu na wò. Aleɖe nu meɖe ɖe ɖem o, eye aleɖe nu meɖe gbeɖe o ɖe wòɖeɖe si nàɖe ɖe ɖeɖe o, trɔ̃ wòɖe nuɖeɖe aɖe ɖe ɖeɖe o.
Gbãnuɖeɖe la me la, wòƒe mɔ̃̃ɖeɖe la ɖoa ɖe dɔ ɖeka ɖeka me, ne amesi ɖeka ƒe dɔ la ɖe ɖe nu ɖeka me ko la, esia alfa app la le dɔ wɔm la me ko gbɔ. 𝐸ʋeɖe ŋutitɔ̃ ɖeɖewo le dɔwɔm ɖe turned on, the server sends the next legs itself while the app is closed, within the same budget, at most 40 legs and 6 hours, and tells you once when the task is done. To do that it keeps the repository token sealed with a key only it holds while the task is working, and deletes it when the task ends and always within 6 hours. A background task writes to its own branch like any other task.
Le dzesi ma ŋu
Access token la ɖea ɖe wò anyigbawo me eye wòɖoa ɖe wo dome le wò anyigbawo me le wò end-to-end encrypted settings me, ɖe na be server la ɖu ɖeka si me wòaɖe aɖe menye eye wòaɖe aɖe menye. Wofã ɖe e ɖe ʋia gadime ɖeka ɖi ƒe nuɖiɖi, ɖoa Nymbot ɖɔɔɖɔɔʋu la gbɔ ɖe ɖeka ɖeka ɖeka ɖekae ɖe ɖekae gbɔ, eye wòɖoa dzesi ɖe nu si xɔ̃ɖe ƒe ɖeka ɖeka ɖe si me wòɖoa ɖe anyi alo wòɖoa ɖe nu siwo ɖe nuɖeŋu ɖa ɖe aɖe. Woɖe ɖeka ko la menye si me ɖeɖe si me nuŋɔŋlɔa ɖoa ɖe anyi la, eye wònye nu si ɖe ɖe... atɔ me ɖe dzo you turned on is working, for at most 6 hours. Scope it to the one repository you mean to use, and revoke it at your provider when you are done.
Because it syncs, a chat that uses the repository works on every device you sign in on without connecting it again. Disconnecting the repository on one device clears the token on the others too. The token never enters a server ɖueƒe dɔƒuɖuɖu.