diff --git a/.changeset/ai-autopilot-bootstrap-deploy.md b/.changeset/ai-autopilot-bootstrap-deploy.md deleted file mode 100644 index ee098c0..0000000 --- a/.changeset/ai-autopilot-bootstrap-deploy.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@gemstack/ai-autopilot": minor ---- - -Add bootstrap's deploy phase and the `DeployTarget` adapter seam. The final phase decides the rendering mode (SSR/SSG/SPA) and the deploy target (Dockploy vs Cloudflare), narrates the plan, and hands it to a `DeployTarget` — the same pattern as the runner seam. `agentDeploy` is the default step (an `ai-sdk` agent decides `{ render, target, reason }`, normalized against the allowed sets); `planOnlyTarget` is the v1 default that decides and narrates without shipping, and `FakeDeployTarget` backs tests. v1 decides + narrates only; real Dockploy / Cloudflare adapters implement `DeployTarget` and are infra-gated follow-ups, so bootstrap never does a blind deploy. The deploy step is optional and its outcome rides on `BootstrapResult.deploy`. Closes #123. diff --git a/.changeset/ai-autopilot-bootstrap-orchestrator.md b/.changeset/ai-autopilot-bootstrap-orchestrator.md deleted file mode 100644 index 63fb9c6..0000000 --- a/.changeset/ai-autopilot-bootstrap-orchestrator.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@gemstack/ai-autopilot": minor ---- - -Add bootstrap mode's orchestrator core: the spine that sequences autopilot's primitives into scope → architect → build → full-fledged loop, taking a user from nothing to a running, production-grade app. `Bootstrap` owns the control flow (the loop, the gate, the interrupt) over four injectable steps, narrating each phase over the generic surface stream and recording the architect's choices to the decisions ledger — no permission asked. The full-fledged loop repeats the production-grade checklist with fresh context, improving against its `{ blockers }` verdict until it is empty or a `maxPasses` budget stops it; prototype scope skips it. Default step builders wire the steps onto the real primitives — `agentArchitect` (an `ai-sdk` agent + the decisions briefing), `supervisorBuild` (the `Supervisor` over personas + runner), and `loopChecklist` / `loopImprove` (the Loop) — so the same orchestrator runs against real agents in production or stubs + `FakeRunner` in a test. Verified end-to-end offline. Closes #122. diff --git a/.changeset/ai-autopilot-code-overview.md b/.changeset/ai-autopilot-code-overview.md deleted file mode 100644 index f00b5e9..0000000 --- a/.changeset/ai-autopilot-code-overview.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@gemstack/ai-autopilot": minor ---- - -Add scale mode: an always-current `CODE-OVERVIEW.md` the agent reads first in a large repo so it stays oriented without re-scanning the tree. The hard part is keeping it fresh — a stale overview is worse than none — so refreshes are gated by a deterministic **material-change detector** (`detectMaterialChange`): a build/config change, a test-framework migration, a directory restructure, or a large change across many areas, not every routine edit. `CodeOverviewMaintainer` owns the policy (refresh on material change, skip otherwise, persist over an `OverviewFs`); `agentOverview` regenerates the map with an `ai-sdk` agent (seeding the previous overview so it revises rather than rewrites); and `overviewLoopPrompt` drops the maintainer into the loop (#113) so it self-maintains on `major-change`. The `CODE-OVERVIEW.md` markdown round-trips via `parseOverview` / `serializeOverview`. Regeneration is injected, so the whole policy is tested offline against a stub. Closes #114. diff --git a/.changeset/ai-autopilot-decisions-ledger.md b/.changeset/ai-autopilot-decisions-ledger.md deleted file mode 100644 index 4c198e4..0000000 --- a/.changeset/ai-autopilot-decisions-ledger.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@gemstack/ai-autopilot": minor ---- - -Add the decisions ledger: durable project memory so a run stops re-pitching ideas that were already turned down. `DecisionLedger` records rejected ideas and settled choices and answers `consult(idea)` / `wasRejected(idea)` (lexical token-overlap matching, deterministic) before the agent proposes; it round-trips a human-editable `DECISIONS.md` via `loadLedger` / `saveLedger` over a storage-agnostic `LedgerFs` seam (a subset of the runner's `RunnerFs`, with a `nodeLedgerFs()` host adapter). `decisionTools(ledger)` exposes `consult_decisions` + `record_decision` to an agent and `decisionBriefing(ledger)` renders the rejected set as a system-prompt fragment. Verified end-to-end on real disk. First child (#112) of the AI-framework epic (#110); the state layer "the loop" (#113) will consult. diff --git a/.changeset/ai-autopilot-framework-presets.md b/.changeset/ai-autopilot-framework-presets.md deleted file mode 100644 index 5ae25f9..0000000 --- a/.changeset/ai-autopilot-framework-presets.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@gemstack/ai-autopilot": minor ---- - -Add the web-app preset seam: framework-specific knowledge selected by detecting the app's framework, on top of the agnostic core. A `Preset` bundles a framework's personas with the signals that identify it; `detectFramework` scores a project's dependencies + files (deps weigh more than files) and `PresetRegistry.select` picks the preset (falling back to the flagship when nothing matches). Ships two built-ins — `vikePreset` (flagship) and `nextPreset` — plus a new `nextPageBuilder` persona (App Router + React Server Components). `presetPersonas(preset)` returns the framework page builder followed by the shared, framework-neutral personas (`sharedPersonas`: the universal-orm modeler + intent-UI designer), so only the page builder changes between frameworks while the rest of the stack stays put and prompts stay neutral. One shared core; a new framework is a new `Preset`, not a runtime fork. Closes #115. diff --git a/.changeset/ai-autopilot-generic-surface.md b/.changeset/ai-autopilot-generic-surface.md deleted file mode 100644 index f0138e0..0000000 --- a/.changeset/ai-autopilot-generic-surface.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@gemstack/ai-autopilot": minor ---- - -Generalize the surface stream to be event-type generic. `EventStream`, `AutopilotHandle`, and `launchAutopilot` now take the event (and result) type as parameters, defaulting to the supervisor's `SupervisorEvent` / `SupervisorRun` so every existing supervisor surface is unchanged. This lets bootstrap (and any future surface) stream its own narration events and return its own result over the same replayable, detached transport. Closes #120. diff --git a/.changeset/ai-autopilot-local-runner.md b/.changeset/ai-autopilot-local-runner.md deleted file mode 100644 index 77972eb..0000000 --- a/.changeset/ai-autopilot-local-runner.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@gemstack/ai-autopilot": minor ---- - -Add `LocalRunner`, the first real adapter behind the runner seam. Where `FakeRunner` simulates a workspace in memory, `LocalRunner` boots each workspace as a real temp directory on the host: real files via `node:fs` (path-traversal guarded to the workspace root), real commands via `child_process` (shell, per-command `cwd`/`env`/`timeoutMs`), a localhost `preview`, and a `dispose()` that removes the workspace. It is the reference the sandboxed adapters (WebContainer, Docker, Flue) mirror. It runs commands unsandboxed on the host, so it is documented for trusted/CI use only, not untrusted agent-authored code. Part of the ai-autopilot epic (#97), issue #106. diff --git a/.changeset/ai-autopilot-personas.md b/.changeset/ai-autopilot-personas.md deleted file mode 100644 index 7ee7349..0000000 --- a/.changeset/ai-autopilot-personas.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@gemstack/ai-autopilot": minor ---- - -Add the personas layer: stack-aware roles that make autopilot opinionated about the GemStack stack (Vike + universal-orm) instead of generic. `definePersona()` builds a role from a system prompt + skills (composed over `@gemstack/ai-skills`) + tools; `personaAgent()`/`personaWorkers()` materialize personas into Supervisor workers; `personaRoster()` describes them to a planner so plans route to the right role. Ships three built-ins: `vikePageBuilder`, `universalOrmModeler`, and `uiIntentDesigner` (the "declare intent, decouple implementation" UI guardrail). First child (#98) of the ai-autopilot end-to-end epic (#97). diff --git a/.changeset/ai-autopilot-production-grade-checklist.md b/.changeset/ai-autopilot-production-grade-checklist.md deleted file mode 100644 index b5b55ba..0000000 --- a/.changeset/ai-autopilot-production-grade-checklist.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@gemstack/ai-autopilot": minor ---- - -Add the `production-grade` checklist prompt and a `{ blockers }` verdict convention. The new built-in prompt judges an app against a production-grade checklist (auth, data layer, error handling, instrumentation, emailing, validation, tests, build/config) and ends with a machine-readable `{ "blockers": [...] }` verdict — an empty list means production-grade. `parseVerdict()` / `isPassing()` read it back, and the loop now gates on that outcome: a `PromptOutcome` carries `verdict` and a `passing` flag (executed *and* no blockers), and `continueOnError: false` stops the chain on `!passing`. Backward compatible — with no verdict reported, `passing === ok`; pass `verdict: null` for an execution-only gate. This is what bootstrap's full-fledged loop repeats against until blockers is empty. Closes #121. diff --git a/.changeset/ai-autopilot-prompts-library.md b/.changeset/ai-autopilot-prompts-library.md deleted file mode 100644 index fee2d10..0000000 --- a/.changeset/ai-autopilot-prompts-library.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@gemstack/ai-autopilot": minor ---- - -Add the built-in prompts library: the stack-aware prompt *bodies* the loop dispatches, shipped as data. Eight markdown bundles under `prompts/` (review TLDR + thorough, code-quality, security, refactor, UX, QA, knowledge-base) that already know Vike + universal-orm, loaded with `builtinLibrary()` / `loadPromptsFrom(dir)` into a `PromptLibrary` and parsed via `@gemstack/ai-skills`' frontmatter (a contributor edits prose, not code). `loopPromptsFor(library, makeAgent)` materializes them into loop prompts so `defaultLoopRules()` ids resolve to real bodies (a fresh agent per pass); `promptInstructions` composes a body with the decisions briefing (#112) and `renderTask` turns a `LoopEvent` into the worker's task. Closes the turnkey wire across #111 / #112 / #113. Verified end-to-end against the built package. Child #111 of the AI-framework epic (#110). diff --git a/.changeset/ai-autopilot-runner.md b/.changeset/ai-autopilot-runner.md deleted file mode 100644 index 06bbe3f..0000000 --- a/.changeset/ai-autopilot-runner.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@gemstack/ai-autopilot": minor ---- - -Add the runner seam: a pluggable `Runner` execution environment (workspace filesystem + shell + optional preview URL), shaped after Flue's `sandbox` contract so WebContainer, Docker, and Flue sandboxes drop in behind one interface. Ships the interface plus `FakeRunner` (the runner analog of `ai-sdk`'s `AiFake`) for infra-free testing, and `runnerTools(session)` to expose a booted session to an agent as sandbox tools (`read_file`, `write_file`, `list_files`, `exec`, `preview`). Real adapters (FlueRunner, WebContainer, Docker) land separately. Interface-first slice of the runner child (#99) of the ai-autopilot epic (#97). diff --git a/.changeset/ai-autopilot-surfaces.md b/.changeset/ai-autopilot-surfaces.md deleted file mode 100644 index f60dd1f..0000000 --- a/.changeset/ai-autopilot-surfaces.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@gemstack/ai-autopilot": minor ---- - -Add surfaces: run the same autopilot in the terminal, an in-page UI, or a background process, all over the Supervisor's `onEvent` stream. `terminalSink()` prints events inline (`formatEvent()` renders one event as a line); `EventStream` is a replayable multi-consumer transport with offset/tail replay (borrowing Flue's Durable-Streams `tail=N`); `launchAutopilot(start)` runs a Supervisor detached and returns an `AutopilotHandle` (`status()`, `events(offset)`, live async `stream()`, `result()`) that backs both the background and in-page (SSE) surfaces. Verified end-to-end against a real Supervisor. Closes the surfaces child (#100) of the ai-autopilot epic (#97). diff --git a/.changeset/ai-autopilot-the-loop.md b/.changeset/ai-autopilot-the-loop.md deleted file mode 100644 index 206b960..0000000 --- a/.changeset/ai-autopilot-the-loop.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@gemstack/ai-autopilot": minor ---- - -Add "the loop": the event-to-prompt-chain policy. The agent declares a semantic `LoopEvent` (a change `kind`) and the matching prompt chain fires: a major change runs review + code-quality + security, a new UI flow runs QA + UX. `Loop.handle(event)` resolves the chain from `LoopRule`s (`defineRule` / `defaultLoopRules()` as the built-in policy) and runs each `LoopPrompt` (`definePrompt`) for its `passes` with fresh context every pass; `matches(event)` is the pure preview, `watch(stream)` handles a stream fire-and-report. Design calls on the two open questions: the trigger is agent-declared (not heuristic), and both modes ship (`handle` awaits; `continueOnError: false` is a blocking gate). Consults the decisions ledger via `ctx.ledger`, and references the prompts library (#111) by id. Verified end-to-end. Child #113 of the AI-framework epic (#110). diff --git a/.changeset/connector-github.md b/.changeset/connector-github.md deleted file mode 100644 index 308dc18..0000000 --- a/.changeset/connector-github.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@gemstack/connector-github": minor ---- - -New package: the GitHub connector for GemStack AI orchestration. Read and act on issues, pull requests, and repository files over the GitHub REST API — `get-repo`, `list-issues`, `get-issue`, `list-pull-requests`, `get-pull-request`, `get-file`, `search-issues`, `comment-on-issue`, `create-issue`. Built with `@gemstack/connectors`; consumes a bearer token (PAT or OAuth) via the mount `credentials` seam. First real connector on the contract (epic #86). diff --git a/.changeset/connector-google-drive.md b/.changeset/connector-google-drive.md deleted file mode 100644 index 183b435..0000000 --- a/.changeset/connector-google-drive.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@gemstack/connector-google-drive": minor ---- - -New package: the Google Drive connector for GemStack AI orchestration. Browse, read, and share Drive files over the Drive REST API (v3) — `get-about`, `list-files`, `search-files`, `get-file`, `get-file-content` (Docs/Sheets/Slides exported to text, other files downloaded), `list-permissions`, `create-folder`, `share-file`, `trash-file`. Built with `@gemstack/connectors`; consumes a Google OAuth 2.0 access token via the mount `credentials` seam. Second connector on the contract (epic #86). diff --git a/.changeset/connectors-kit.md b/.changeset/connectors-kit.md deleted file mode 100644 index 37981f9..0000000 --- a/.changeset/connectors-kit.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@gemstack/connectors": minor ---- - -New package: the connector contract for GemStack AI orchestration. `defineConnector` declares a tool connector to an external service (its auth requirement + tools); `mountConnectors` composes any number into a single `@gemstack/mcp` server, namespacing tools by connector id and resolving credentials at call time. Built on `@gemstack/mcp`, framework-agnostic. First step of the connectors epic (GitHub, Google Drive to follow). diff --git a/examples/autopilot-quickstart/CHANGELOG.md b/examples/autopilot-quickstart/CHANGELOG.md new file mode 100644 index 0000000..d005fbc --- /dev/null +++ b/examples/autopilot-quickstart/CHANGELOG.md @@ -0,0 +1,20 @@ +# @gemstack/example-autopilot-quickstart + +## 0.0.1 + +### Patch Changes + +- Updated dependencies [70168c5] +- Updated dependencies [11dce73] +- Updated dependencies [aa1925f] +- Updated dependencies [c9b4d0d] +- Updated dependencies [57cbba4] +- Updated dependencies [04965c5] +- Updated dependencies [07cc623] +- Updated dependencies [7fde5fc] +- Updated dependencies [55b3697] +- Updated dependencies [8f780f3] +- Updated dependencies [b0c0647] +- Updated dependencies [d261873] +- Updated dependencies [481c2f0] + - @gemstack/ai-autopilot@0.2.0 diff --git a/examples/autopilot-quickstart/package.json b/examples/autopilot-quickstart/package.json index bff0539..d2821a9 100644 --- a/examples/autopilot-quickstart/package.json +++ b/examples/autopilot-quickstart/package.json @@ -1,6 +1,6 @@ { "name": "@gemstack/example-autopilot-quickstart", - "version": "0.0.0", + "version": "0.0.1", "private": true, "description": "Runnable end-to-end quickstart for @gemstack/ai-autopilot: personas + Supervisor + runner + surfaces composed into one build-a-feature flow, offline via AiFake.", "type": "module", diff --git a/examples/bootstrap-quickstart/CHANGELOG.md b/examples/bootstrap-quickstart/CHANGELOG.md new file mode 100644 index 0000000..f2285c5 --- /dev/null +++ b/examples/bootstrap-quickstart/CHANGELOG.md @@ -0,0 +1,20 @@ +# @gemstack/example-bootstrap-quickstart + +## 0.0.1 + +### Patch Changes + +- Updated dependencies [70168c5] +- Updated dependencies [11dce73] +- Updated dependencies [aa1925f] +- Updated dependencies [c9b4d0d] +- Updated dependencies [57cbba4] +- Updated dependencies [04965c5] +- Updated dependencies [07cc623] +- Updated dependencies [7fde5fc] +- Updated dependencies [55b3697] +- Updated dependencies [8f780f3] +- Updated dependencies [b0c0647] +- Updated dependencies [d261873] +- Updated dependencies [481c2f0] + - @gemstack/ai-autopilot@0.2.0 diff --git a/examples/bootstrap-quickstart/package.json b/examples/bootstrap-quickstart/package.json index 33c1f5d..4a165ca 100644 --- a/examples/bootstrap-quickstart/package.json +++ b/examples/bootstrap-quickstart/package.json @@ -1,6 +1,6 @@ { "name": "@gemstack/example-bootstrap-quickstart", - "version": "0.0.0", + "version": "0.0.1", "private": true, "description": "Runnable capstone for @gemstack/ai-autopilot: preset detection + Bootstrap (scope → architect → build → full-fledged loop → deploy) + scale mode, streamed over surfaces, offline via AiFake + FakeRunner.", "type": "module", diff --git a/examples/connectors-quickstart/CHANGELOG.md b/examples/connectors-quickstart/CHANGELOG.md new file mode 100644 index 0000000..eb372de --- /dev/null +++ b/examples/connectors-quickstart/CHANGELOG.md @@ -0,0 +1,8 @@ +# @gemstack/example-connectors-quickstart + +## 0.0.1 + +### Patch Changes + +- Updated dependencies [b0430f9] + - @gemstack/connectors@0.1.0 diff --git a/examples/connectors-quickstart/package.json b/examples/connectors-quickstart/package.json index 884312e..327754d 100644 --- a/examples/connectors-quickstart/package.json +++ b/examples/connectors-quickstart/package.json @@ -1,6 +1,6 @@ { "name": "@gemstack/example-connectors-quickstart", - "version": "0.0.0", + "version": "0.0.1", "private": true, "description": "Runnable reference connector built with @gemstack/connectors: a read-only in-memory source, mounted into an MCP server and exercised with McpTestClient. Copy from this to write a real connector.", "type": "module", diff --git a/packages/ai-autopilot/CHANGELOG.md b/packages/ai-autopilot/CHANGELOG.md index ed58789..6d55426 100644 --- a/packages/ai-autopilot/CHANGELOG.md +++ b/packages/ai-autopilot/CHANGELOG.md @@ -1,5 +1,23 @@ # @gemstack/ai-autopilot +## 0.2.0 + +### Minor Changes + +- 70168c5: Add bootstrap's deploy phase and the `DeployTarget` adapter seam. The final phase decides the rendering mode (SSR/SSG/SPA) and the deploy target (Dockploy vs Cloudflare), narrates the plan, and hands it to a `DeployTarget` — the same pattern as the runner seam. `agentDeploy` is the default step (an `ai-sdk` agent decides `{ render, target, reason }`, normalized against the allowed sets); `planOnlyTarget` is the v1 default that decides and narrates without shipping, and `FakeDeployTarget` backs tests. v1 decides + narrates only; real Dockploy / Cloudflare adapters implement `DeployTarget` and are infra-gated follow-ups, so bootstrap never does a blind deploy. The deploy step is optional and its outcome rides on `BootstrapResult.deploy`. Closes #123. +- 11dce73: Add bootstrap mode's orchestrator core: the spine that sequences autopilot's primitives into scope → architect → build → full-fledged loop, taking a user from nothing to a running, production-grade app. `Bootstrap` owns the control flow (the loop, the gate, the interrupt) over four injectable steps, narrating each phase over the generic surface stream and recording the architect's choices to the decisions ledger — no permission asked. The full-fledged loop repeats the production-grade checklist with fresh context, improving against its `{ blockers }` verdict until it is empty or a `maxPasses` budget stops it; prototype scope skips it. Default step builders wire the steps onto the real primitives — `agentArchitect` (an `ai-sdk` agent + the decisions briefing), `supervisorBuild` (the `Supervisor` over personas + runner), and `loopChecklist` / `loopImprove` (the Loop) — so the same orchestrator runs against real agents in production or stubs + `FakeRunner` in a test. Verified end-to-end offline. Closes #122. +- aa1925f: Add scale mode: an always-current `CODE-OVERVIEW.md` the agent reads first in a large repo so it stays oriented without re-scanning the tree. The hard part is keeping it fresh — a stale overview is worse than none — so refreshes are gated by a deterministic **material-change detector** (`detectMaterialChange`): a build/config change, a test-framework migration, a directory restructure, or a large change across many areas, not every routine edit. `CodeOverviewMaintainer` owns the policy (refresh on material change, skip otherwise, persist over an `OverviewFs`); `agentOverview` regenerates the map with an `ai-sdk` agent (seeding the previous overview so it revises rather than rewrites); and `overviewLoopPrompt` drops the maintainer into the loop (#113) so it self-maintains on `major-change`. The `CODE-OVERVIEW.md` markdown round-trips via `parseOverview` / `serializeOverview`. Regeneration is injected, so the whole policy is tested offline against a stub. Closes #114. +- c9b4d0d: Add the decisions ledger: durable project memory so a run stops re-pitching ideas that were already turned down. `DecisionLedger` records rejected ideas and settled choices and answers `consult(idea)` / `wasRejected(idea)` (lexical token-overlap matching, deterministic) before the agent proposes; it round-trips a human-editable `DECISIONS.md` via `loadLedger` / `saveLedger` over a storage-agnostic `LedgerFs` seam (a subset of the runner's `RunnerFs`, with a `nodeLedgerFs()` host adapter). `decisionTools(ledger)` exposes `consult_decisions` + `record_decision` to an agent and `decisionBriefing(ledger)` renders the rejected set as a system-prompt fragment. Verified end-to-end on real disk. First child (#112) of the AI-framework epic (#110); the state layer "the loop" (#113) will consult. +- 57cbba4: Add the web-app preset seam: framework-specific knowledge selected by detecting the app's framework, on top of the agnostic core. A `Preset` bundles a framework's personas with the signals that identify it; `detectFramework` scores a project's dependencies + files (deps weigh more than files) and `PresetRegistry.select` picks the preset (falling back to the flagship when nothing matches). Ships two built-ins — `vikePreset` (flagship) and `nextPreset` — plus a new `nextPageBuilder` persona (App Router + React Server Components). `presetPersonas(preset)` returns the framework page builder followed by the shared, framework-neutral personas (`sharedPersonas`: the universal-orm modeler + intent-UI designer), so only the page builder changes between frameworks while the rest of the stack stays put and prompts stay neutral. One shared core; a new framework is a new `Preset`, not a runtime fork. Closes #115. +- 04965c5: Generalize the surface stream to be event-type generic. `EventStream`, `AutopilotHandle`, and `launchAutopilot` now take the event (and result) type as parameters, defaulting to the supervisor's `SupervisorEvent` / `SupervisorRun` so every existing supervisor surface is unchanged. This lets bootstrap (and any future surface) stream its own narration events and return its own result over the same replayable, detached transport. Closes #120. +- 07cc623: Add `LocalRunner`, the first real adapter behind the runner seam. Where `FakeRunner` simulates a workspace in memory, `LocalRunner` boots each workspace as a real temp directory on the host: real files via `node:fs` (path-traversal guarded to the workspace root), real commands via `child_process` (shell, per-command `cwd`/`env`/`timeoutMs`), a localhost `preview`, and a `dispose()` that removes the workspace. It is the reference the sandboxed adapters (WebContainer, Docker, Flue) mirror. It runs commands unsandboxed on the host, so it is documented for trusted/CI use only, not untrusted agent-authored code. Part of the ai-autopilot epic (#97), issue #106. +- 7fde5fc: Add the personas layer: stack-aware roles that make autopilot opinionated about the GemStack stack (Vike + universal-orm) instead of generic. `definePersona()` builds a role from a system prompt + skills (composed over `@gemstack/ai-skills`) + tools; `personaAgent()`/`personaWorkers()` materialize personas into Supervisor workers; `personaRoster()` describes them to a planner so plans route to the right role. Ships three built-ins: `vikePageBuilder`, `universalOrmModeler`, and `uiIntentDesigner` (the "declare intent, decouple implementation" UI guardrail). First child (#98) of the ai-autopilot end-to-end epic (#97). +- 55b3697: Add the `production-grade` checklist prompt and a `{ blockers }` verdict convention. The new built-in prompt judges an app against a production-grade checklist (auth, data layer, error handling, instrumentation, emailing, validation, tests, build/config) and ends with a machine-readable `{ "blockers": [...] }` verdict — an empty list means production-grade. `parseVerdict()` / `isPassing()` read it back, and the loop now gates on that outcome: a `PromptOutcome` carries `verdict` and a `passing` flag (executed _and_ no blockers), and `continueOnError: false` stops the chain on `!passing`. Backward compatible — with no verdict reported, `passing === ok`; pass `verdict: null` for an execution-only gate. This is what bootstrap's full-fledged loop repeats against until blockers is empty. Closes #121. +- 8f780f3: Add the built-in prompts library: the stack-aware prompt _bodies_ the loop dispatches, shipped as data. Eight markdown bundles under `prompts/` (review TLDR + thorough, code-quality, security, refactor, UX, QA, knowledge-base) that already know Vike + universal-orm, loaded with `builtinLibrary()` / `loadPromptsFrom(dir)` into a `PromptLibrary` and parsed via `@gemstack/ai-skills`' frontmatter (a contributor edits prose, not code). `loopPromptsFor(library, makeAgent)` materializes them into loop prompts so `defaultLoopRules()` ids resolve to real bodies (a fresh agent per pass); `promptInstructions` composes a body with the decisions briefing (#112) and `renderTask` turns a `LoopEvent` into the worker's task. Closes the turnkey wire across #111 / #112 / #113. Verified end-to-end against the built package. Child #111 of the AI-framework epic (#110). +- b0c0647: Add the runner seam: a pluggable `Runner` execution environment (workspace filesystem + shell + optional preview URL), shaped after Flue's `sandbox` contract so WebContainer, Docker, and Flue sandboxes drop in behind one interface. Ships the interface plus `FakeRunner` (the runner analog of `ai-sdk`'s `AiFake`) for infra-free testing, and `runnerTools(session)` to expose a booted session to an agent as sandbox tools (`read_file`, `write_file`, `list_files`, `exec`, `preview`). Real adapters (FlueRunner, WebContainer, Docker) land separately. Interface-first slice of the runner child (#99) of the ai-autopilot epic (#97). +- d261873: Add surfaces: run the same autopilot in the terminal, an in-page UI, or a background process, all over the Supervisor's `onEvent` stream. `terminalSink()` prints events inline (`formatEvent()` renders one event as a line); `EventStream` is a replayable multi-consumer transport with offset/tail replay (borrowing Flue's Durable-Streams `tail=N`); `launchAutopilot(start)` runs a Supervisor detached and returns an `AutopilotHandle` (`status()`, `events(offset)`, live async `stream()`, `result()`) that backs both the background and in-page (SSE) surfaces. Verified end-to-end against a real Supervisor. Closes the surfaces child (#100) of the ai-autopilot epic (#97). +- 481c2f0: Add "the loop": the event-to-prompt-chain policy. The agent declares a semantic `LoopEvent` (a change `kind`) and the matching prompt chain fires: a major change runs review + code-quality + security, a new UI flow runs QA + UX. `Loop.handle(event)` resolves the chain from `LoopRule`s (`defineRule` / `defaultLoopRules()` as the built-in policy) and runs each `LoopPrompt` (`definePrompt`) for its `passes` with fresh context every pass; `matches(event)` is the pure preview, `watch(stream)` handles a stream fire-and-report. Design calls on the two open questions: the trigger is agent-declared (not heuristic), and both modes ship (`handle` awaits; `continueOnError: false` is a blocking gate). Consults the decisions ledger via `ctx.ledger`, and references the prompts library (#111) by id. Verified end-to-end. Child #113 of the AI-framework epic (#110). + ## 0.1.2 ### Patch Changes diff --git a/packages/ai-autopilot/package.json b/packages/ai-autopilot/package.json index bfa2517..cb3a102 100644 --- a/packages/ai-autopilot/package.json +++ b/packages/ai-autopilot/package.json @@ -1,6 +1,6 @@ { "name": "@gemstack/ai-autopilot", - "version": "0.1.2", + "version": "0.2.0", "description": "Orchestration for @gemstack/ai-sdk agents: a Supervisor that plans, dispatches subagents (bounded concurrency + budget guardrails), and synthesizes the result.", "keywords": [ "ai", diff --git a/packages/connector-github/CHANGELOG.md b/packages/connector-github/CHANGELOG.md new file mode 100644 index 0000000..7f5355a --- /dev/null +++ b/packages/connector-github/CHANGELOG.md @@ -0,0 +1,12 @@ +# @gemstack/connector-github + +## 0.1.0 + +### Minor Changes + +- f360932: New package: the GitHub connector for GemStack AI orchestration. Read and act on issues, pull requests, and repository files over the GitHub REST API — `get-repo`, `list-issues`, `get-issue`, `list-pull-requests`, `get-pull-request`, `get-file`, `search-issues`, `comment-on-issue`, `create-issue`. Built with `@gemstack/connectors`; consumes a bearer token (PAT or OAuth) via the mount `credentials` seam. First real connector on the contract (epic #86). + +### Patch Changes + +- Updated dependencies [b0430f9] + - @gemstack/connectors@0.1.0 diff --git a/packages/connector-github/package.json b/packages/connector-github/package.json index 687771f..e803c7e 100644 --- a/packages/connector-github/package.json +++ b/packages/connector-github/package.json @@ -1,6 +1,6 @@ { "name": "@gemstack/connector-github", - "version": "0.0.0", + "version": "0.1.0", "description": "GitHub connector for GemStack AI orchestration: read and act on issues, pull requests, and repo files over the GitHub REST API. Built with @gemstack/connectors.", "keywords": [ "mcp", diff --git a/packages/connector-google-drive/CHANGELOG.md b/packages/connector-google-drive/CHANGELOG.md new file mode 100644 index 0000000..b08db20 --- /dev/null +++ b/packages/connector-google-drive/CHANGELOG.md @@ -0,0 +1,12 @@ +# @gemstack/connector-google-drive + +## 0.1.0 + +### Minor Changes + +- 6e37d60: New package: the Google Drive connector for GemStack AI orchestration. Browse, read, and share Drive files over the Drive REST API (v3) — `get-about`, `list-files`, `search-files`, `get-file`, `get-file-content` (Docs/Sheets/Slides exported to text, other files downloaded), `list-permissions`, `create-folder`, `share-file`, `trash-file`. Built with `@gemstack/connectors`; consumes a Google OAuth 2.0 access token via the mount `credentials` seam. Second connector on the contract (epic #86). + +### Patch Changes + +- Updated dependencies [b0430f9] + - @gemstack/connectors@0.1.0 diff --git a/packages/connector-google-drive/package.json b/packages/connector-google-drive/package.json index 1e97830..06ebe9e 100644 --- a/packages/connector-google-drive/package.json +++ b/packages/connector-google-drive/package.json @@ -1,6 +1,6 @@ { "name": "@gemstack/connector-google-drive", - "version": "0.0.0", + "version": "0.1.0", "description": "Google Drive connector for GemStack AI orchestration: browse, read, and share Drive files over the Drive REST API. Built with @gemstack/connectors.", "keywords": [ "mcp", diff --git a/packages/connectors/CHANGELOG.md b/packages/connectors/CHANGELOG.md new file mode 100644 index 0000000..d5ddfaf --- /dev/null +++ b/packages/connectors/CHANGELOG.md @@ -0,0 +1,7 @@ +# @gemstack/connectors + +## 0.1.0 + +### Minor Changes + +- b0430f9: New package: the connector contract for GemStack AI orchestration. `defineConnector` declares a tool connector to an external service (its auth requirement + tools); `mountConnectors` composes any number into a single `@gemstack/mcp` server, namespacing tools by connector id and resolving credentials at call time. Built on `@gemstack/mcp`, framework-agnostic. First step of the connectors epic (GitHub, Google Drive to follow). diff --git a/packages/connectors/package.json b/packages/connectors/package.json index 2834b81..14e3713 100644 --- a/packages/connectors/package.json +++ b/packages/connectors/package.json @@ -1,6 +1,6 @@ { "name": "@gemstack/connectors", - "version": "0.0.0", + "version": "0.1.0", "description": "The connector contract for GemStack AI orchestration: define a tool connector to an external service (GitHub, Google Drive, ...) once with `defineConnector`, compose any number into a single MCP server with `mountConnectors`. Built on @gemstack/mcp; framework-agnostic.", "keywords": [ "mcp",