Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ jobs:
if: github.event_name == 'push' || needs.ci-scope.outputs.library == 'true'
runs-on: ubuntu-latest
env:
LIBS: chat,langgraph,ag-ui,render,a2ui,licensing,telemetry
LIBS: chat,langgraph,ag-ui,render,a2ui,licensing,signal-resource,telemetry
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
contents: read
id-token: write # required for npm trusted publishing + provenance
env:
NPM_PUBLISHABLE_PROJECTS: chat,langgraph,ag-ui,render,a2ui,licensing,telemetry
NPM_PUBLISHABLE_PROJECTS: chat,langgraph,ag-ui,render,a2ui,licensing,signal-resource,telemetry
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
# Node 24 ships npm 11+ which fully implements npm trusted publishing
Expand Down Expand Up @@ -57,10 +57,10 @@ jobs:
run: npx nx run-many -t lint,test,build --projects=$NPM_PUBLISHABLE_PROJECTS --skip-nx-cache

- name: Patch install telemetry into publishable manifests
run: node libs/telemetry/scripts/apply-install-telemetry.mjs dist/libs/chat dist/libs/langgraph dist/libs/ag-ui dist/libs/render dist/libs/a2ui dist/libs/licensing
run: node libs/telemetry/scripts/apply-install-telemetry.mjs dist/libs/chat dist/libs/langgraph dist/libs/ag-ui dist/libs/render dist/libs/a2ui dist/libs/licensing dist/libs/signal-resource

- name: Verify install telemetry in publishable manifests
run: node libs/telemetry/scripts/verify-install-telemetry.mjs dist/libs/chat dist/libs/langgraph dist/libs/ag-ui dist/libs/render dist/libs/a2ui dist/libs/licensing dist/libs/telemetry
run: node libs/telemetry/scripts/verify-install-telemetry.mjs dist/libs/chat dist/libs/langgraph dist/libs/ag-ui dist/libs/render dist/libs/a2ui dist/libs/licensing dist/libs/signal-resource dist/libs/telemetry

- name: Verify atomic release versions
run: node scripts/verify-release-versions.mjs --tag "$RELEASE_TAG"
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release-provenance.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:
hashes: ${{ steps.hash.outputs.hashes }}
tag: ${{ steps.tag.outputs.tag }}
env:
NPM_PUBLISHABLE_PROJECTS: chat,langgraph,ag-ui,render,a2ui,licensing,telemetry
NPM_PUBLISHABLE_PROJECTS: chat,langgraph,ag-ui,render,a2ui,licensing,signal-resource,telemetry
steps:
- name: Resolve target tag
id: tag
Expand All @@ -53,7 +53,7 @@ jobs:
- name: Pack tarballs
run: |
mkdir -p release-artifacts
for p in chat langgraph ag-ui render a2ui licensing telemetry; do
for p in chat langgraph ag-ui render a2ui licensing signal-resource telemetry; do
npm pack "dist/libs/$p" --pack-destination release-artifacts
done
- name: Generate subject hashes
Expand Down
172 changes: 172 additions & 0 deletions apps/website/content/docs/signal-resource/api/api-docs.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
[
{
"name": "SignalChatResourceLike",
"kind": "interface",
"description": "Minimal structural contract required to adapt a signal-backed chat resource.",
"properties": [
{
"name": "error",
"type": "Signal<Error | undefined>",
"description": "Current resource error, if any.",
"optional": false
},
{
"name": "isLoading",
"type": "Signal<boolean>",
"description": "Whether the resource is currently producing a response.",
"optional": false
},
{
"name": "reload",
"type": "() => boolean",
"description": "Reload the resource, used as a fallback for `Agent.regenerate()`.",
"optional": true
},
{
"name": "resendMessages",
"type": "() => void",
"description": "Re-run against the current history, if supported by the resource.",
"optional": true
},
{
"name": "sendMessage",
"type": "(message: object) => void",
"description": "Send a new user message.",
"optional": false
},
{
"name": "setMessages",
"type": "(messages: SignalChatResourceMessage[]) => void",
"description": "Replace resource message history. Used by `Agent.regenerate()`.",
"optional": false
},
{
"name": "stop",
"type": "() => void",
"description": "Stop the current response. Called only while `isLoading()` is true.",
"optional": false
},
{
"name": "value",
"type": "Signal<SignalChatResourceMessage[]>",
"description": "Current resource message history.",
"optional": false
}
],
"examples": []
},
{
"name": "SignalChatResourceToolCall",
"kind": "interface",
"description": "Tool-call shape exposed by a signal-backed chat resource.",
"properties": [
{
"name": "args",
"type": "unknown",
"description": "Parsed tool arguments.",
"optional": false
},
{
"name": "name",
"type": "string",
"description": "Tool name shown in Threadplane tool-call UI.",
"optional": false
},
{
"name": "result",
"type": "PromiseSettledResult<unknown>",
"description": "Settled tool result, when the resource exposes one.",
"optional": true
},
{
"name": "status",
"type": "\"pending\" | \"done\"",
"description": "Resource-specific lifecycle state for the tool call.",
"optional": false
},
{
"name": "toolCallId",
"type": "string",
"description": "Stable identifier for linking assistant messages to tool-call details.",
"optional": false
}
],
"examples": []
},
{
"name": "SignalChatResourceMessage",
"kind": "type",
"description": "Message shape consumed by the signal-resource adapter.",
"signature": "object | object | object",
"examples": []
},
{
"name": "SignalResourceAgentSource",
"kind": "type",
"description": "Resource instance or factory accepted by `provideAgent()`.",
"signature": "SignalChatResourceLike | () => SignalChatResourceLike",
"examples": []
},
{
"name": "injectAgent",
"kind": "function",
"description": "Injects the signal-resource-backed Agent registered by provideAgent().",
"signature": "injectAgent(): Agent<>",
"params": [],
"returns": {
"type": "Agent<>",
"description": ""
},
"examples": [
"```ts\nimport { injectAgent } from '@threadplane/signal-resource';\n\nconst agent = injectAgent();\n```"
]
},
{
"name": "provideAgent",
"kind": "function",
"description": "Provides a signal-resource-backed Agent through Angular dependency injection.",
"signature": "provideAgent(ref: AgentRef<T>, sourceOrFactory: SignalResourceAgentSource): Provider[]",
"params": [
{
"name": "ref",
"type": "AgentRef<T>",
"description": "",
"optional": false
},
{
"name": "sourceOrFactory",
"type": "SignalResourceAgentSource",
"description": "",
"optional": false
}
],
"returns": {
"type": "Provider[]",
"description": ""
},
"examples": [
"```ts\nimport { provideAgent } from '@threadplane/signal-resource';\n\nbootstrapApplication(AppComponent, {\n providers: [provideAgent(() => resource)],\n});\n```"
]
},
{
"name": "toAgent",
"kind": "function",
"description": "Wrap a signal-backed chat resource in the runtime-neutral Agent contract.",
"signature": "toAgent(resource: SignalChatResourceLike): Agent<>",
"params": [
{
"name": "resource",
"type": "SignalChatResourceLike",
"description": "",
"optional": false
}
],
"returns": {
"type": "Agent<>",
"description": ""
},
"examples": [
"```ts\nimport { toAgent } from '@threadplane/signal-resource';\n\nconst agent = toAgent(resource);\n```"
]
}
]
1 change: 1 addition & 0 deletions apps/website/scripts/generate-api-docs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,7 @@ const LIBRARIES: LibraryEntryConfig[] = [
{ docSlug: 'chat', entryPoints: ['libs/chat/src/public-api.ts', 'libs/chat/testing/public-api.ts'] },
{ docSlug: 'render', entryPoints: ['libs/render/src/public-api.ts'] },
{ docSlug: 'ag-ui', entryPoints: ['libs/ag-ui/src/public-api.ts'] },
{ docSlug: 'signal-resource', entryPoints: ['libs/signal-resource/src/public-api.ts'] },
{ docSlug: 'a2ui', entryPoints: ['libs/a2ui/src/index.ts'] },
{ docSlug: 'middleware', entryPoints: ['libs/middleware/src/langgraph/index.ts'] },
{ docSlug: 'licensing', entryPoints: ['libs/licensing/src/index.ts'] },
Expand Down
Loading
Loading