Skip to content

Releases: kunpengtalk/PeakCode

Peak Code v0.9.0

Choose a tag to compare

@github-actions github-actions released this 22 Sep 13:31

Full Changelog: v0.8.1...v0.9.0

Peak Code v0.8.1

Choose a tag to compare

@github-actions github-actions released this 22 Sep 11:38

Full Changelog: v0.8.0...v0.8.1

Peak Code v0.8.0

Choose a tag to compare

@github-actions github-actions released this 22 Sep 11:16

Full Changelog: v0.7.2...v0.8.0

Peak Code v0.7.2

Choose a tag to compare

@github-actions github-actions released this 21 Sep 04:48

Full Changelog: v0.7.1...v0.7.2

Peak Code v0.7.1

Choose a tag to compare

@github-actions github-actions released this 20 Sep 14:30

Full Changelog: v0.7.0...v0.7.1

Peak Code v0.7.0

Choose a tag to compare

@github-actions github-actions released this 20 Sep 13:20

Full Changelog: v0.6.0...v0.7.0

Peak Code v0.6.0

Choose a tag to compare

@github-actions github-actions released this 18 Sep 13:18

Full Changelog: v0.5.0...v0.6.0

Peak Code v0.5.0

Choose a tag to compare

@github-actions github-actions released this 18 Sep 09:46

What's Changed

  • chore(web): drop the unreachable cross-provider handoff path by @jwangkun in #26

Full Changelog: v0.4.0...v0.5.0

Peak Code v0.4.0

Choose a tag to compare

@github-actions github-actions released this 18 Sep 01:11

The changes in this release, from CHANGELOG.md:

Added

  • The agent can use this Mac: the computer tool drives native apps the way a person does. get_state reads the accessibility tree of the app in front — each control's role, name, position, size and the actions it actually supports, with a ref to act on — and act presses, focuses, raises or writes a value on that ref without moving your pointer or taking your focus. click/type/key post real input for the targets a tree cannot express (a canvas, a custom-drawn control) and say so, because they do move the cursor and type into your focus. A screenshot comes back as an image with the display's scale already accounted for, so the point you read off the picture goes straight into click. Observation is bounded twice so a wedged app cannot hang the socket, element actions through the accessibility API are preferred over coordinates, and a ref from an older observation is refused with an explanation rather than quietly landing on whatever now sits at that position. The work runs in a native helper of its own — a small Peak Code Computer Use app, which is what macOS files the Accessibility and Screen Recording grants against rather than Peak Code itself — installed at a fixed path, launched through LaunchServices, and rebuilt only when its own source changes, so those two switches in System Settings are a once-per-machine decision that survives every rebuild. A packaged build ships the helper in Contents/Resources/computer-use; a checkout compiles it on first launch; either way the installed bundle is fingerprinted and left untouched when it is already current. When a permission is missing, the model is told exactly which one and to stop until the user grants it. The same tool moves through a window the way a person does — scroll with a direction and a distance, drag as one gesture along a path (a slider, a reorder, a selection, a canvas) with modifiers if the gesture needs them, and click with double and right-button forms — and the clipboard is part of the desktop rather than a secret behind type: read_clipboard gets what the user or an app just copied, write_clipboard hands text to an app that wants a paste, and type can take strategy: \"paste\" to enter long text or CJK as one ⌘V instead of hundreds of keystrokes (the user's clipboard is put back afterwards). list_windows reports every on-screen window with bounds a click can be aimed at, displays reports the displays and their scale factors, and coordinates are handled properly on both counts: a capture carries where it started on screen and the scale of the display it is on, so a point read off a screenshot of a window on a second monitor lands where it looks like it should — the earlier code divided by the main display's scale and ignored the capture's origin, which put clicks off by the window's distance from the screen's corner. The helper now answers a bug in one of its own handlers with an internal_error that names it instead of taking the process down with it. macOS only. (.docs/computer-use.md)

  • Plugins attach to a turn, several at a time. A plugin card in /plugins — or one of the installed tiles — opens a detail view (long description, capabilities, the skills it ships, example prompts) whose Use plugin / 立即使用 action puts the plugin on the composer of the chat you were last in, opening a new chat when there is none. The composer's + menu lists the discovered plugins too, as checkboxes, so one turn can carry more than one, and each shows up as a removable chip. Chips live on the composer draft next to images, pasted screenshots and assistant selections — attaching a plugin never costs you an attachment — and the turn carries them as mentions exactly the way an @name token does, deduped so a plugin both named in the prompt and picked as a chip is sent once. (.docs/bundled-plugins.md)

  • IM channels: a message sent from a chat app opens (or continues) a thread in the workspace and the answer is sent back into the chat, so the run stays a conversation you can open and continue in the app. Six channel ids: personal WeChat (a QR handshake mints its credentials, then a bridge long-polls outward, so no public URL is needed), Feishu/Lark and QQ over their own outbound sockets, 企业微信 and 微信公众号 as signed Tencent callbacks (those two need public HTTPS), and a generic webhook that carries both directions — the push-only group robots that announce a finished run and the secret-guarded inbound bridge. The bridge keeps its conversation index in SQLite (migration 042_ImConversations), starts a fresh thread after sessionIdleHours idle (default 12, 0 = never), resolves workspace and model per turn because an IM run has no composer, queues a message that arrives mid-turn, and withdraws the channel's own "working on it" notice once the answer lands. Config and status traffic is owner-only — these endpoints can mint a pairing link — while the Tencent callbacks authenticate by signature and POST /api/im/task by its own secret, which is mandatory as soon as the server is reachable beyond loopback. Settings → 频道 renders the whole surface: per-channel status, the callback URL to paste into Tencent, Save/Test, the remembered conversations and the recent traffic. (.docs/im-channels.md)

  • Phone access without a networking project: a Cloudflare quick tunnel (cloudflared) publishes the server on an https://*.trycloudflare.com address so a phone reaches it without port forwarding or a public IP, and a pairing QR opens the workspace — or the conversation that was on screen — on the other device, with the one-time credential in the URL hash so it never reaches a server log. The tunnel is refused unless the server requires authentication (the address is public), acts only on real enabled transitions so an unrelated settings write cannot rotate the address, and stops itself when the backend shuts down. (.docs/im-channels.md)

  • Pi packages under Settings → Pi Packages: install, list and remove the packages pi install understands — npm:@scope/pkg, git:host/user/repo, and local paths — from the app. Installs go through pi's own package manager, so sources land in the same settings.json the CLI reads and a package installed here is visible to pi list. The listing reports what each package contributes (skills, prompts, extensions, themes) and where it was installed; new threads load it on their next start, and /reload picks it up in an open thread. This is the surface that makes third-party packages like pi-crew usable in Peak Code: its six crew_* subagent tools, orchestration skill, and /pi-crew-plan / /pi-crew-review prompt templates all run in-process.

  • Themes and prompt-engineering skills ported from can1357/oh-my-pi (MIT): bun scripts/generate-oh-my-pi-theme-seeds.ts turns oh-my-pi's 100 pi TUI themes into Peak Code ChromeTheme seeds (apps/web/src/theme/oh-my-pi.seed.generated.ts), selectable in the appearance picker as omp-*; and its two prompt-engineering skills (system-prompts, semantic-compression) ship as a bundled in-tree payload written to the shared skill library at startup, so read_skill and /skill: resolve them with no network. Both are additive: the skills follow the existing AGENT_SKILL_PACKS switch (the same one that governs the default pack, so turning it off drops both), and the themes have no switch of their own — they are extra options in the picker, and not choosing one changes nothing. (.docs/oh-my-pi-integration.md)

  • Skills have a per-skill switch, and the ported content has commands. Settings → Skills now carries a toggle on every local skill: switching one off keeps its files on disk but removes it from the agent's per-turn skill list and makes read_skill refuse it, so a skill you do not want cannot be listed or opened. It is stored as AGENT_DISABLED_SKILLS (empty by default — nothing changes until you use it) and keys on the skill's directory name, the same id read_skill resolves. Three composer commands make the ported skills usable without describing them by hand: /compress drives semantic-compression, /prompt-review drives system-prompts, and /review-prs runs this repository's own gate (bash scripts/pr-review.sh <PR number|--all|nothing to auto-detect>, reporting its verdict). All three insert their instruction into the composer for you to read before sending, like /subagents. (.docs/oh-my-pi-integration.md)

  • Extension failures are reported in the thread instead of being dropped: every extension that fails to load, and every extension handler that throws while a turn runs, now emits a runtime.warning naming the extension and the event. Extension load errors were previously invisible unless the model happened to notice a missing tool.

  • Scheduled tasks (Automations, /automations): a plan plus one instruction plus the workspace it runs in. When the plan comes due, the server opens a real thread in that workspace and sends it the instruction, so every run leaves a conversation you can read and continue. Plans are once, daily and weekly, evaluated as wall-clock times in an IANA timezone; a task can be paused, resumed or run by hand, a one-off switches itself off once it has run, and a trigger missed by more than six hours is rolled forward instead of firing late. Each task carries the composer's interaction mode (Agent / Plan / Goal) into its runs. (.docs/automations.md)

  • The schedule_task agent tool: "every morning, summarise what changed here" now schedules the task...

Read more

Peak Code v0.3.0

Choose a tag to compare

@github-actions github-actions released this 17 Sep 09:41

What's Changed

  • fix(gateway): tolerate malformed SSE chunks and fix Anthropic tool bl… by @ccbq2010 in #16
  • feat(settings): add Model Providers panel to manage pi models.json by @Neonity2020 in #19
  • docs(readme): explain the macOS damaged-app prompt and how to unblock it by @jwangkun in #21
  • feat(settings): pi model provider dialogs, agent toolkit, kanban boards, and unified app identity by @jwangkun in #20
  • fix(web): repair the browser test harness so CI can pass by @jwangkun in #22

New Contributors

Full Changelog: v0.0.2...v0.3.0