Skip to content

[Markdown] create documents in workspace - #2966

Merged
George Ng (GeorgeNgMsft) merged 4 commits into
mainfrom
georgengmsft-markdown-workspace-create
Sep 4, 2026
Merged

[Markdown] create documents in workspace#2966
George Ng (GeorgeNgMsft) merged 4 commits into
mainfrom
georgengmsft-markdown-workspace-create

Conversation

@GeorgeNgMsft

@GeorgeNgMsft George Ng (GeorgeNgMsft) commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Summary

This PR fixes document creation and separates open/create semantics

Layer 1 (bottom) of the replacement stack for #2940.

This layer adds only core workspace-safe Markdown document creation:

  • propagates the host-authorized working directory through action context and agent RPC
  • creates Markdown files under that workspace, including nested relative paths
  • preserves requested initial content
  • rejects traversal, absolute/drive-qualified, out-of-workspace, and symlink-escape paths
  • avoids constructing the Markdown model for create/open actions
  • passes the CLI request working directory into dispatch

Deferred to upper layers

  • document update/edit semantics
  • revision and binding-token conflict checks
  • streaming update persistence
  • browser-view persistence and synchronization
  • reopening editor bindings
  • loopback view-server changes
  • the unrelated aiclient runtimeConfig/OpenAI change

Validation

  • pnpm run prettier:changed:fix / pnpm run prettier:changed (pass)
  • lint ratchet (pass)
  • complexity ratchet (pass)
  • circular-dependency ratchet (pass)
  • debt/skipped-test gate (pass)
  • direct path-policy smoke covering nested creation, traversal rejection, canonical root resolution, and junction escape rejection (pass)
  • affected TypeScript build and Jest suites were attempted but environment-blocked: worktree setup could not fetch locked public packages baseline-browser-mapping@2.11.19 and uuid@14.0.2 because Azure Artifacts returned 401, leaving workspace package links incomplete; the resulting compiler errors were missing-module diagnostics

@GeorgeNgMsft George Ng (GeorgeNgMsft) changed the title fix(markdown): create documents in workspace [Markdown] create documents in workspace Sep 3, 2026
@GeorgeNgMsft
George Ng (GeorgeNgMsft) marked this pull request as ready for review September 3, 2026 22:43
Comment thread ts/packages/agents/markdown/src/agent/markdownActionHandler.ts
Comment thread ts/packages/agents/markdown/src/agent/markdownActionHandler.ts Outdated
Comment thread ts/packages/agents/markdown/src/agent/markdownActionHandler.ts Outdated
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@GeorgeNgMsft
George Ng (GeorgeNgMsft) force-pushed the georgengmsft-markdown-workspace-create branch from ba5ab44 to d0f6e5f Compare September 4, 2026 21:57
@GeorgeNgMsft
George Ng (GeorgeNgMsft) added this pull request to the merge queue Sep 4, 2026
Merged via the queue into main with commit 8d872e9 Sep 4, 2026
26 checks passed
Hillary Mutisya (hillary-mutisya) pushed a commit to hillary-mutisya/TypeAgent that referenced this pull request Sep 10, 2026
## Stack

Layer 3 of the replacement stack for microsoft#2940.

- Base: `main` (microsoft#2966 and microsoft#2967 are merged)
- Parent layer: microsoft#2967 (merged)

## Included

- Persists headless Markdown updates directly to the authorized
workspace file.
- Makes streaming completion idempotent by recognizing the
already-produced revision instead of applying operations twice.
- Carries immutable binding identity and SHA-256 revision checks across
read/apply.
- Rejects stale tokens, rebound root/path/file identities, revision
conflicts, and roots replaced by symlinks or junctions.
- Adds request IDs to concurrent document read/apply IPC and correlates
responses.
- Keeps the view service server-authoritative for update persistence
even when no browser/SSE client is connected.

## Deferred to browser layer

- Browser `document-manager.ts` rewrite and serializer/autosave
behavior.
- Primary/secondary SSE lifecycle, browser synchronization/promotion UX,
and reopening the same file while preserving browser binding state.
- Broader browser snapshot adoption and loopback binding behavior.

## Validation

Historical results from before the rebase (not rerun as full build/Jest
validation):

- `@typeagent/markdown-agent` TypeScript and frontend build
- Focused Jest suites: 44 tests passed across Markdown persistence,
operation engine, path policy, creation path policy, and action handler
coverage
- Prettier changed-file check
- Git diff check
- Repo lint ratchet

After rebasing onto `f3e4308ea2cd722a2905eceac3f2a1e61d19a420`: 23
focused Node integration smoke checks passed using the actual handler,
persistence module, and operation engine with simulated translator/view
IPC; TypeScript 5.4.5 syntax parsing and Git diff checks passed. Full
build/Jest, semantic typechecking, and repository ratchets were not
rerun: this worktree has no installed dependencies (`fluid-build`
missing). Pinned Prettier 3.5.3 was unavailable offline.

Complete layer diff against the new main base: 992 insertions, 532
deletions (1,524 changed lines), across 6 files.

---------

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants