@tomismeta/paperclip-aperture 0.4.1 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Paperclip Aperture
4
4
 
5
- **The live attention layer for Paperclip, powered by Aperture's deterministic attention engine.**
5
+ **The live attention layer for Paperclip, combining Aperture Core continuity with Paperclip-native operator policy.**
6
6
 
7
7
  [![paperclip-aperture npm](https://img.shields.io/npm/v/%40tomismeta%2Fpaperclip-aperture?label=paperclip-aperture&color=2563eb)](https://www.npmjs.com/package/@tomismeta/paperclip-aperture)
8
8
  [![aperture github](https://img.shields.io/badge/aperture-tomismeta%2Faperture-18181b)](https://github.com/tomismeta/aperture)
@@ -13,7 +13,7 @@
13
13
  <p></p>
14
14
  </div>
15
15
 
16
- Paperclip Aperture adds a Focus surface to Paperclip that deterministically ranks approvals, issue activity, and other human-facing events into `now`, `next`, and `ambient`.
16
+ Paperclip Aperture adds a Focus surface to Paperclip that turns approvals, issue activity, and other human-facing signals into `now`, `next`, and `ambient`.
17
17
 
18
18
  It is designed as a live attention layer, not an inbox clone:
19
19
 
@@ -66,22 +66,35 @@ and agents attention now? actually sees to th
66
66
  - a Focus surface inside Paperclip
67
67
  - ranked `now`, `next`, and `ambient` attention lanes
68
68
  - embedded explainability in the Focus UI, including `Why now`, `Why next`, confidence, signals, thread context, and related activity
69
+ - bounded focus hold while the operator is actively working the current `now` item, so `Show context` and inline commenting do not immediately lose the thread beneath them
69
70
  - approval handling, including budget-specific approval semantics
70
71
  - issue-aware operator language such as `review required`, `blocked`, and targeted recommended moves
71
72
  - agent-aware routing that distinguishes known company agents from human/operator roles when issue text references them
72
- - a plugin-local deterministic semantic mapping layer that interprets Paperclip issue, approval, and agent signals before publishing them into Aperture Core
73
+ - a plugin-local semantic mapping and policy layer that interprets Paperclip issue, approval, and agent signals before composing the final Focus view
73
74
  - richer semantic continuity hints on mapped issue events, including `supersedes` and `resolves` relationships where Paperclip-specific intent is clear
74
75
  - document-aware review interpretation for memo/spec-backed issues so Focus can tell the difference between `review is blocked on the artifact` and `the artifact is attached, monitor instead`
75
76
  - dynamic re-stacking so items can move between `now`, `next`, and `ambient` as new evidence arrives
76
77
  - inline issue commenting from the Focus surface when a Paperclip issue supports written response
77
78
  - durable acknowledge/suppression behavior backed by plugin state and ledger replay
79
+ - worker-owned display composition that merges live Paperclip approvals into the final Focus snapshot before the UI sees it
80
+ - bounded Core trace export and sparse Focus action telemetry/activity writes for replay and debugging
81
+ - live Core diagnostics export, including signal summaries, memory profile snapshots, and current-session attention state for offline analysis
82
+ - worker-bridged operator signals for Focus page presence, active-item viewing, and context expansion so Aperture Core sees real interaction evidence instead of the plugin faking a second attention model
83
+ - overlay diagnostics export that compares `core -> reconciled -> display` so the plugin's host-policy contribution is inspectable without confusing it for Core judgment
78
84
  - a sidebar entry, page, and dashboard widget
85
+ - worker-side host read caching for issue/comment/document/agent reconciliation, with fresh summary/export reads when you need the latest host truth
86
+ - bounded per-company Core sessions with health reporting so the worker does not grow without limit during normal multi-company use
87
+ - replayable operator signal entries and overlay-response ledger entries so Focus actions remain auditable even when a frame came from the display adapter rather than Core
88
+ - decision-owner metadata on reconciled/display frames so exports can distinguish Core judgment, Paperclip reconciliation, approval overlays, and final display promotion
89
+ - a corpus-backed `issue-intelligence` regression check in CI so heuristic edits stay inspectable
90
+ - rollback-safe local mutations that restore the last durable attention state if persistence fails
91
+ - versioned persisted attention envelopes with an explicit migration path for older schemas
79
92
 
80
93
  ## Explainability
81
94
 
82
95
  Focus is meant to be more legible than a smart inbox.
83
96
 
84
- The current `0.3.x` explainability slice keeps reasoning attached to the cards you are already acting on:
97
+ The current `0.4.x` explainability slice keeps reasoning attached to the cards you are already acting on:
85
98
 
86
99
  - `Why now` on the active card explains why the current item outranks the rest of the queue
87
100
  - `Why next` on queued rows explains why something is staged behind the current top item
@@ -99,33 +112,40 @@ The intent is not to expose every internal scoring detail. It is to help an oper
99
112
 
100
113
  This plugin treats Paperclip as the host runtime and UI shell, while embedding [Aperture Core](https://github.com/tomismeta/aperture/tree/main/packages/core) through the npm package [`@tomismeta/aperture-core`](https://www.npmjs.com/package/@tomismeta/aperture-core).
101
114
 
102
- It is a pure SDK integration: Aperture Core is used as-is inside a self-contained Paperclip plugin, with no changes to Aperture Core or Paperclip core.
115
+ It is an SDK-first integration with explicit plugin-side host policy. Aperture Core handles continuity, replay, and global attention mechanics; the plugin adds Paperclip-specific candidate generation, approval overlays, and operator language where the host can know more than Core alone.
103
116
 
104
- For `0.3.x`, the boundary works like this:
117
+ For `0.4.x`, the boundary works like this:
105
118
 
106
- - the plugin worker owns Aperture ingestion, replay, review state, and display composition
119
+ - the plugin worker owns Aperture ingestion, replay, review state, display composition, reconciliation caching, and Paperclip-native policy overlays
120
+ - the final Focus view is therefore Core-backed but not Core-only today: the plugin still owns some Paperclip-specific candidate and lane policy where the host has facts Core cannot infer by itself
107
121
  - Paperclip remains the system of record for issue and approval writes
108
- - approval transport still goes through same-origin Paperclip HTTP APIs from the plugin UI because the current plugin SDK does not expose approval read/write clients
109
- - the plugin intentionally publishes `ApertureEvent`s today, using a Paperclip-specific semantic mapping layer and ontology, rather than switching fully to `SourceEvent`
110
- - that semantic layer includes reusable intent detectors, actor resolution against real company agents, downstream blocker extraction, and shared operator-language generation inside the plugin
122
+ - approval transport now goes through a worker-side Paperclip adapter using the plugin SDK HTTP client, so the browser UI no longer talks to host approval APIs directly
123
+ - the plugin preserves Paperclip source facts as `SourceEvent`s where the Core contract supports them, while still exporting the normalized `ApertureEvent` used for replay/debug
124
+ - that semantic layer includes reusable intent detectors, actor resolution against real company agents, downstream blocker extraction, explicit rule ids for matched issue heuristics, and shared operator-language generation inside the plugin
125
+ - typed Paperclip issue blocker relations are preserved as Focus context/provenance/metadata so Aperture has better dependency facts without the plugin inventing dependency routing
126
+ - `activity.logged` document events invalidate stale reconciled state so document-backed review blockers refresh promptly without a full browser-side merge layer
127
+ - Focus exports the live Core snapshot, the reconciled/plugin-composed display snapshot, and bounded Core traces so replay/debug flows can inspect both the engine substrate and the final operator view
111
128
 
112
- The plugin has been validated against [`@tomismeta/aperture-core@0.4.0`](https://www.npmjs.com/package/@tomismeta/aperture-core).
129
+ The plugin has been validated against [`@tomismeta/aperture-core@0.7.0`](https://www.npmjs.com/package/@tomismeta/aperture-core) and [`@paperclipai/plugin-sdk@2026.428.0`](https://www.npmjs.com/package/@paperclipai/plugin-sdk).
130
+
131
+ If your Paperclip host is not running at the default local address, set the plugin config field `paperclipApiBase` so the worker-side approval adapter can reach the correct host API.
113
132
 
114
133
  ## Development
115
134
 
116
135
  ```bash
117
136
  pnpm install
118
- pnpm typecheck
119
- pnpm test
120
- pnpm build
137
+ pnpm verify
121
138
  ```
122
139
 
123
140
  Before releasing, run:
124
141
 
125
142
  ```bash
143
+ pnpm clean
126
144
  pnpm release:check
127
145
  ```
128
146
 
147
+ `pnpm verify` runs typecheck, tests, the issue-intelligence eval corpus, a production build, and bundle-size checks.
148
+
129
149
  For a live local Paperclip smoke test, start Paperclip first:
130
150
 
131
151
  ```bash
@@ -156,6 +176,9 @@ Then open `http://127.0.0.1:3100/APE/aperture` and verify:
156
176
 
157
177
  - Plugin on npm: [`@tomismeta/paperclip-aperture`](https://www.npmjs.com/package/@tomismeta/paperclip-aperture)
158
178
  - Roadmap and releasing: [docs/ROADMAP.md](./docs/ROADMAP.md)
179
+ - Architecture remediation note: [docs/AUDIT-REMEDIATION-2026-04.md](./docs/AUDIT-REMEDIATION-2026-04.md)
180
+ - May 2026 audit remediation note: [docs/AUDIT-REMEDIATION-2026-05.md](./docs/AUDIT-REMEDIATION-2026-05.md)
181
+ - Contribution guide: [CONTRIBUTING.md](./CONTRIBUTING.md)
159
182
  - Aperture GitHub repo: [tomismeta/aperture](https://github.com/tomismeta/aperture)
160
183
  - Aperture Core on npm: [`@tomismeta/aperture-core`](https://www.npmjs.com/package/@tomismeta/aperture-core)
161
184
  - Paperclip GitHub repo: [paperclipai/paperclip](https://github.com/paperclipai/paperclip)
package/dist/manifest.js CHANGED
@@ -1,73 +1 @@
1
- const manifest = {
2
- id: "tomismeta.paperclip-aperture",
3
- apiVersion: 1,
4
- version: "0.4.1",
5
- displayName: "Paperclip Aperture",
6
- description: "The live attention layer for Paperclip, powered by Aperture's deterministic attention engine.",
7
- author: "@tomismeta",
8
- categories: ["automation", "ui"],
9
- capabilities: [
10
- "events.subscribe",
11
- "agents.read",
12
- "issues.read",
13
- "issue.comments.read",
14
- "issue.comments.create",
15
- "issue.documents.read",
16
- "activity.log.write",
17
- "plugin.state.read",
18
- "plugin.state.write",
19
- "telemetry.track",
20
- "ui.dashboardWidget.register",
21
- "ui.page.register",
22
- "ui.sidebar.register"
23
- ],
24
- entrypoints: {
25
- worker: "./dist/worker.js",
26
- ui: "./dist/ui"
27
- },
28
- instanceConfigSchema: {
29
- type: "object",
30
- properties: {
31
- captureIssueLifecycle: {
32
- type: "boolean",
33
- title: "Capture Issue Lifecycle",
34
- default: true,
35
- description: "Turn issue creation and update events into Aperture status signals."
36
- },
37
- captureRunFailures: {
38
- type: "boolean",
39
- title: "Capture Run Failures",
40
- default: true,
41
- description: "Turn failed agent runs into high-salience attention events."
42
- }
43
- }
44
- },
45
- ui: {
46
- slots: [
47
- {
48
- type: "page",
49
- id: "attention-page",
50
- displayName: "Focus",
51
- exportName: "AttentionPage",
52
- routePath: "aperture"
53
- },
54
- {
55
- type: "sidebar",
56
- id: "attention-sidebar-link",
57
- displayName: "Focus",
58
- exportName: "AttentionSidebarLink"
59
- },
60
- {
61
- type: "dashboardWidget",
62
- id: "attention-widget",
63
- displayName: "Focus",
64
- exportName: "DashboardWidget"
65
- }
66
- ]
67
- }
68
- };
69
- var manifest_default = manifest;
70
- export {
71
- manifest_default as default
72
- };
73
- //# sourceMappingURL=manifest.js.map
1
+ const e={id:"tomismeta.paperclip-aperture",apiVersion:1,version:"0.4.3",displayName:"Paperclip Aperture",description:"The live attention layer for Paperclip, combining Aperture Core continuity with Paperclip-native operator policy.",author:"@tomismeta",categories:["automation","ui"],capabilities:["events.subscribe","http.outbound","agents.read","issues.read","issue.relations.read","issue.comments.read","issue.comments.create","issue.documents.read","activity.log.write","plugin.state.read","plugin.state.write","telemetry.track","ui.dashboardWidget.register","ui.page.register","ui.sidebar.register"],entrypoints:{worker:"./dist/worker.js",ui:"./dist/ui"},instanceConfigSchema:{type:"object",properties:{captureIssueLifecycle:{type:"boolean",title:"Capture Issue Lifecycle",default:!0,description:"Turn issue creation and update events into Aperture status signals."},captureRunFailures:{type:"boolean",title:"Capture Run Failures",default:!0,description:"Turn failed agent runs into high-salience attention events."},paperclipApiBase:{type:"string",title:"Paperclip API Base",default:"http://127.0.0.1:3100",description:"Base URL the worker should use for Paperclip approval reads and writes when the plugin SDK lacks a first-class approval client."}}},ui:{slots:[{type:"page",id:"attention-page",displayName:"Focus",exportName:"AttentionPage",routePath:"aperture"},{type:"sidebar",id:"attention-sidebar-link",displayName:"Focus",exportName:"AttentionSidebarLink"},{type:"dashboardWidget",id:"attention-widget",displayName:"Focus",exportName:"DashboardWidget"}]}};var t=e;export{t as default};