@mc1global/opencode-jarvis 0.11.0 → 0.13.0
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 +21 -1
- package/dist/application/azure-sync/task-push-use-cases.d.ts.map +1 -1
- package/dist/application/azure-sync/task-push-use-cases.js +21 -3
- package/dist/application/azure-sync/task-push-use-cases.js.map +1 -1
- package/dist/application/bootstrap/use-cases.d.ts.map +1 -1
- package/dist/application/bootstrap/use-cases.js +4 -4
- package/dist/application/bootstrap/use-cases.js.map +1 -1
- package/dist/application/config/config-service.d.ts +3 -1
- package/dist/application/config/config-service.d.ts.map +1 -1
- package/dist/application/config/config-service.js +4 -0
- package/dist/application/config/config-service.js.map +1 -1
- package/dist/application/wiki-feedback/poll-service.d.ts +56 -0
- package/dist/application/wiki-feedback/poll-service.d.ts.map +1 -0
- package/dist/application/wiki-feedback/poll-service.js +87 -0
- package/dist/application/wiki-feedback/poll-service.js.map +1 -0
- package/dist/application/wiki-feedback/use-cases.d.ts +115 -0
- package/dist/application/wiki-feedback/use-cases.d.ts.map +1 -0
- package/dist/application/wiki-feedback/use-cases.js +271 -0
- package/dist/application/wiki-feedback/use-cases.js.map +1 -0
- package/dist/domain/config/value-objects.d.ts +28 -1
- package/dist/domain/config/value-objects.d.ts.map +1 -1
- package/dist/domain/config/value-objects.js +10 -0
- package/dist/domain/config/value-objects.js.map +1 -1
- package/dist/domain/governance/policies.d.ts.map +1 -1
- package/dist/domain/governance/policies.js +41 -0
- package/dist/domain/governance/policies.js.map +1 -1
- package/dist/domain/wiki-feedback/entities.d.ts +101 -0
- package/dist/domain/wiki-feedback/entities.d.ts.map +1 -0
- package/dist/domain/wiki-feedback/entities.js +154 -0
- package/dist/domain/wiki-feedback/entities.js.map +1 -0
- package/dist/domain/wiki-feedback/index.d.ts +13 -0
- package/dist/domain/wiki-feedback/index.d.ts.map +1 -0
- package/dist/domain/wiki-feedback/index.js +11 -0
- package/dist/domain/wiki-feedback/index.js.map +1 -0
- package/dist/domain/wiki-feedback/ports.d.ts +47 -0
- package/dist/domain/wiki-feedback/ports.d.ts.map +1 -0
- package/dist/domain/wiki-feedback/ports.js +13 -0
- package/dist/domain/wiki-feedback/ports.js.map +1 -0
- package/dist/domain/wiki-feedback/repositories.d.ts +33 -0
- package/dist/domain/wiki-feedback/repositories.d.ts.map +1 -0
- package/dist/domain/wiki-feedback/repositories.js +12 -0
- package/dist/domain/wiki-feedback/repositories.js.map +1 -0
- package/dist/domain/wiki-feedback/value-objects.d.ts +74 -0
- package/dist/domain/wiki-feedback/value-objects.d.ts.map +1 -0
- package/dist/domain/wiki-feedback/value-objects.js +144 -0
- package/dist/domain/wiki-feedback/value-objects.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +46 -0
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/wiki-feedback/azure-wiki-client.d.ts +36 -0
- package/dist/infrastructure/wiki-feedback/azure-wiki-client.d.ts.map +1 -0
- package/dist/infrastructure/wiki-feedback/azure-wiki-client.js +106 -0
- package/dist/infrastructure/wiki-feedback/azure-wiki-client.js.map +1 -0
- package/dist/infrastructure/wiki-feedback/sqlite-feedback-repository.d.ts +31 -0
- package/dist/infrastructure/wiki-feedback/sqlite-feedback-repository.d.ts.map +1 -0
- package/dist/infrastructure/wiki-feedback/sqlite-feedback-repository.js +149 -0
- package/dist/infrastructure/wiki-feedback/sqlite-feedback-repository.js.map +1 -0
- package/dist/tools/wiki-feedback-tools.d.ts +9 -0
- package/dist/tools/wiki-feedback-tools.d.ts.map +1 -0
- package/dist/tools/wiki-feedback-tools.js +189 -0
- package/dist/tools/wiki-feedback-tools.js.map +1 -0
- package/package.json +1 -1
- package/templates/agents-md.template.md +7 -2
package/README.md
CHANGED
|
@@ -144,10 +144,30 @@ Content of `opencode.json`:
|
|
|
144
144
|
```json
|
|
145
145
|
{
|
|
146
146
|
"$schema": "https://opencode.ai/config.json",
|
|
147
|
-
"plugin": ["@mc1global/opencode-jarvis"]
|
|
147
|
+
"plugin": ["@mc1global/opencode-jarvis"],
|
|
148
|
+
"command": {
|
|
149
|
+
"config": {
|
|
150
|
+
"template": "Use JARVIS config tools to view and modify configuration. Run config-read to show current settings, then config-write to apply changes. $ARGUMENTS",
|
|
151
|
+
"description": "View or modify JARVIS configuration"
|
|
152
|
+
},
|
|
153
|
+
"healthcheck": {
|
|
154
|
+
"template": "Run the JARVIS healthcheck diagnostic and provide actionable guidance for any issues found. $ARGUMENTS",
|
|
155
|
+
"description": "Run JARVIS environment diagnostics"
|
|
156
|
+
},
|
|
157
|
+
"sync-azure": {
|
|
158
|
+
"template": "Execute the JARVIS Azure DevOps sync workflow — check connectivity, review sync status, and synchronize cards/epics/sprints. $ARGUMENTS",
|
|
159
|
+
"description": "Sync kanban board with Azure DevOps"
|
|
160
|
+
},
|
|
161
|
+
"start-card": {
|
|
162
|
+
"template": "Start working on a JARVIS kanban card. Handle the full lifecycle: check status, assign agent and sprint, move to doing, and start a context session. $ARGUMENTS",
|
|
163
|
+
"description": "Start working on a kanban card"
|
|
164
|
+
}
|
|
165
|
+
}
|
|
148
166
|
}
|
|
149
167
|
```
|
|
150
168
|
|
|
169
|
+
The `"command"` block registers JARVIS slash commands (`/config`, `/healthcheck`, `/sync-azure`, `/start-card`) so OpenCode shows them in the command list. The plugin's `command.execute.before` hook enriches the prompt with detailed JARVIS-specific instructions when executed.
|
|
170
|
+
|
|
151
171
|
OpenCode installs npm plugins automatically at startup. Requires access to the `@mc1global` org on npm.
|
|
152
172
|
|
|
153
173
|
#### Where exactly does `opencode.json` go?
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-push-use-cases.d.ts","sourceRoot":"","sources":["../../../src/application/azure-sync/task-push-use-cases.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,kCAAkC,CAAC;AACzF,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAIxG,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,0CAA0C,CAAC;AAGjG,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAI/D,sCAAsC;AACtC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,kBAAkB,EAAE,SAAS;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IAC9E,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC;AAED,yCAAyC;AACzC,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,eAAe,EAAE,qBAAqB,CAAC;IAChD,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;CACzC;AAED,iDAAiD;AACjD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;CAC3C;AAID;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAExE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,GACd;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAOjD;AAID;;;GAGG;AACH,qBAAa,gBAAgB;IAIf,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA2C;gBAE3C,IAAI,EAAE,YAAY;IAE/C;;;;OAIG;IACG,aAAa,CACjB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,eAAe,EACzB,IAAI,EAAE,eAAe,EACrB,gBAAgB,EAAE,MAAM,EACxB,aAAa,EAAE,MAAM,GAAG,SAAS,GAChC,OAAO,CAAC,cAAc,CAAC;YA0CZ,cAAc;
|
|
1
|
+
{"version":3,"file":"task-push-use-cases.d.ts","sourceRoot":"","sources":["../../../src/application/azure-sync/task-push-use-cases.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,kCAAkC,CAAC;AACzF,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAIxG,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,0CAA0C,CAAC;AAGjG,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAI/D,sCAAsC;AACtC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,kBAAkB,EAAE,SAAS;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IAC9E,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC;AAED,yCAAyC;AACzC,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,eAAe,EAAE,qBAAqB,CAAC;IAChD,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;CACzC;AAED,iDAAiD;AACjD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;CAC3C;AAID;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAExE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,GACd;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAOjD;AAID;;;GAGG;AACH,qBAAa,gBAAgB;IAIf,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA2C;gBAE3C,IAAI,EAAE,YAAY;IAE/C;;;;OAIG;IACG,aAAa,CACjB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,eAAe,EACzB,IAAI,EAAE,eAAe,EACrB,gBAAgB,EAAE,MAAM,EACxB,aAAa,EAAE,MAAM,GAAG,SAAS,GAChC,OAAO,CAAC,cAAc,CAAC;YA0CZ,cAAc;CAmI7B"}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* DDD: Application service coordinating bounded contexts
|
|
12
12
|
*/
|
|
13
13
|
import { ok, Timestamp } from "../../domain/shared/value-objects.js";
|
|
14
|
-
import { FieldMapper } from "../../domain/azure-sync/services.js";
|
|
14
|
+
import { FieldMapper, AZURE_FIELDS } from "../../domain/azure-sync/services.js";
|
|
15
15
|
import { SyncMapping, SyncLog } from "../../domain/azure-sync/entities.js";
|
|
16
16
|
import { SyncMappingId, SyncLogId, WorkItemId } from "../../domain/azure-sync/value-objects.js";
|
|
17
17
|
import { AzureFieldBuilder } from "./field-builders.js";
|
|
@@ -112,14 +112,32 @@ export class TaskPushUseCases {
|
|
|
112
112
|
await this.deps.syncMappingRepo.save(existing);
|
|
113
113
|
}
|
|
114
114
|
else {
|
|
115
|
-
// Create new Task
|
|
116
|
-
|
|
115
|
+
// Create new Task — Azure DevOps rejects creating work items
|
|
116
|
+
// directly in a terminal state (e.g. "Done" on inherited Basic).
|
|
117
|
+
// For met ACs, strip the State field from the creation payload
|
|
118
|
+
// and apply it via a separate PATCH after creation.
|
|
119
|
+
const statePath = `/fields/${AZURE_FIELDS.STATE}`;
|
|
120
|
+
const createFields = taskInput.met
|
|
121
|
+
? fields.filter((f) => f.path !== statePath)
|
|
122
|
+
: fields;
|
|
123
|
+
const createResult = await this.deps.azureClient.createWorkItem(org, project, wiType, createFields);
|
|
117
124
|
if (!createResult.success)
|
|
118
125
|
return createResult;
|
|
119
126
|
action = "created";
|
|
120
127
|
azureId = createResult.data.id;
|
|
121
128
|
azureRev = createResult.data.rev;
|
|
122
129
|
url = createResult.data.url;
|
|
130
|
+
// For met ACs, transition the newly-created Task to the done state
|
|
131
|
+
if (taskInput.met) {
|
|
132
|
+
const stateField = fields.find((f) => f.path === statePath);
|
|
133
|
+
if (stateField) {
|
|
134
|
+
const stateUpdateResult = await this.deps.azureClient.updateWorkItem(org, project, azureId, [stateField]);
|
|
135
|
+
if (stateUpdateResult.success) {
|
|
136
|
+
azureRev = stateUpdateResult.data.rev;
|
|
137
|
+
}
|
|
138
|
+
// Non-fatal: Task was created successfully, state update is best-effort
|
|
139
|
+
}
|
|
140
|
+
}
|
|
123
141
|
// Create sync mapping
|
|
124
142
|
const now = Timestamp.now();
|
|
125
143
|
const seq = await this.deps.syncMappingRepo.nextMappingSequence();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-push-use-cases.js","sourceRoot":"","sources":["../../../src/application/azure-sync/task-push-use-cases.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAGrE,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"task-push-use-cases.js","sourceRoot":"","sources":["../../../src/application/azure-sync/task-push-use-cases.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-cases.d.ts","sourceRoot":"","sources":["../../../src/application/bootstrap/use-cases.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"use-cases.d.ts","sourceRoot":"","sources":["../../../src/application/bootstrap/use-cases.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAI5E,6DAA6D;AAC7D,MAAM,WAAW,eAAe;IAC9B,4DAA4D;IAC5D,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,sDAAsD;IACtD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,iDAAiD;IACjD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,sDAAsD;IACtD,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,wDAAwD;IACxD,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;CACvC;AAED,qCAAqC;AACrC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC;AA8DD;;GAEG;AACH,qBAAa,iBAAiB;IAC5B;;;;;;;OAOG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,UAAQ,GAAG,eAAe;IAiDrF;;OAEG;IACH,WAAW,CAAC,eAAe,CAAC,EAAE,eAAe,GAAG,eAAe;CAUhE;AAkCD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,MAAM,CAaR;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,MAAM,CAKR;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAiBhE"}
|
|
@@ -9,8 +9,7 @@
|
|
|
9
9
|
* SOLID: DIP — depends on ConfigService abstraction for config reading
|
|
10
10
|
*/
|
|
11
11
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
12
|
-
import {
|
|
13
|
-
import { fileURLToPath } from "node:url";
|
|
12
|
+
import { join } from "node:path";
|
|
14
13
|
// ── Vault Skeleton Folders ────────────────────────────────────────────────────
|
|
15
14
|
const VAULT_SKELETON_DIRS = [
|
|
16
15
|
"obsidian-vault",
|
|
@@ -144,9 +143,10 @@ export class BootstrapUseCases {
|
|
|
144
143
|
* 3. `templates/` relative to CWD (fallback for local dev)
|
|
145
144
|
*/
|
|
146
145
|
function resolveTemplatePath() {
|
|
147
|
-
//
|
|
146
|
+
// Resolve this file's directory. Bun supports __dirname natively for ESM,
|
|
147
|
+
// and Jest/ts-jest provides it in CJS mode — works in both runtimes.
|
|
148
148
|
// In dist: dist/application/bootstrap/use-cases.js → ../../.. = package root
|
|
149
|
-
const thisDir =
|
|
149
|
+
const thisDir = __dirname;
|
|
150
150
|
const packageRoot = join(thisDir, "..", "..", "..");
|
|
151
151
|
const candidates = [
|
|
152
152
|
join(packageRoot, "templates", "agents-md.template.md"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-cases.js","sourceRoot":"","sources":["../../../src/application/bootstrap/use-cases.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"use-cases.js","sourceRoot":"","sources":["../../../src/application/bootstrap/use-cases.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* DDD: Application service orchestrating domain VOs + infra repo
|
|
12
12
|
*/
|
|
13
13
|
import type { ConfigRepository } from "../../domain/config/repositories.js";
|
|
14
|
-
import type { ConfigContextName, ConfigMap, RagConfig, PipelineConfig, AgentRegistryConfig, AzureSyncConfig, McpServerConfig, KanbanConfig, TokenMetricsConfig } from "../../domain/config/value-objects.js";
|
|
14
|
+
import type { ConfigContextName, ConfigMap, RagConfig, PipelineConfig, AgentRegistryConfig, AzureSyncConfig, McpServerConfig, KanbanConfig, TokenMetricsConfig, WikiFeedbackConfig } from "../../domain/config/value-objects.js";
|
|
15
15
|
/**
|
|
16
16
|
* Resolves configuration for bounded contexts.
|
|
17
17
|
*
|
|
@@ -40,6 +40,8 @@ export declare class ConfigService {
|
|
|
40
40
|
getKanbanConfig(): KanbanConfig;
|
|
41
41
|
/** Get Token Metrics configuration (type-safe). */
|
|
42
42
|
getTokenMetricsConfig(): TokenMetricsConfig;
|
|
43
|
+
/** Get Wiki Feedback configuration (type-safe). */
|
|
44
|
+
getWikiFeedbackConfig(): WikiFeedbackConfig;
|
|
43
45
|
/**
|
|
44
46
|
* Get config for any context name.
|
|
45
47
|
* Returns deep-merged result or defaults. If no defaults exist
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-service.d.ts","sourceRoot":"","sources":["../../../src/application/config/config-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,KAAK,EACV,iBAAiB,EACjB,SAAS,EACT,SAAS,EACT,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,kBAAkB,EACnB,MAAM,sCAAsC,CAAC;AAG9C;;;;;;;;;GASG;AACH,qBAAa,aAAa;IAGZ,OAAO,CAAC,QAAQ,CAAC,UAAU;IAFvC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA8B;gBAEvB,UAAU,EAAE,gBAAgB;IAIzD,yCAAyC;IACzC,YAAY,IAAI,SAAS;IAIzB,8CAA8C;IAC9C,iBAAiB,IAAI,cAAc;IAInC,oDAAoD;IACpD,sBAAsB,IAAI,mBAAmB;IAI7C,gDAAgD;IAChD,kBAAkB,IAAI,eAAe;IAIrC,gDAAgD;IAChD,kBAAkB,IAAI,eAAe;IAIrC,4CAA4C;IAC5C,eAAe,IAAI,YAAY;IAI/B,mDAAmD;IACnD,qBAAqB,IAAI,kBAAkB;IAM3C;;;;OAIG;IACH,SAAS,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,WAAW,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAClE,SAAS,CAAC,WAAW,EAAE,iBAAiB,GAAG,OAAO;IAOlD,wEAAwE;IACxE,yBAAyB,IAAI,OAAO;IAMpC,OAAO,CAAC,QAAQ;IAIhB;;;OAGG;IACH,OAAO,CAAC,OAAO;CAuBhB;AAID;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAmBnE"}
|
|
1
|
+
{"version":3,"file":"config-service.d.ts","sourceRoot":"","sources":["../../../src/application/config/config-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,KAAK,EACV,iBAAiB,EACjB,SAAS,EACT,SAAS,EACT,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,sCAAsC,CAAC;AAG9C;;;;;;;;;GASG;AACH,qBAAa,aAAa;IAGZ,OAAO,CAAC,QAAQ,CAAC,UAAU;IAFvC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA8B;gBAEvB,UAAU,EAAE,gBAAgB;IAIzD,yCAAyC;IACzC,YAAY,IAAI,SAAS;IAIzB,8CAA8C;IAC9C,iBAAiB,IAAI,cAAc;IAInC,oDAAoD;IACpD,sBAAsB,IAAI,mBAAmB;IAI7C,gDAAgD;IAChD,kBAAkB,IAAI,eAAe;IAIrC,gDAAgD;IAChD,kBAAkB,IAAI,eAAe;IAIrC,4CAA4C;IAC5C,eAAe,IAAI,YAAY;IAI/B,mDAAmD;IACnD,qBAAqB,IAAI,kBAAkB;IAI3C,mDAAmD;IACnD,qBAAqB,IAAI,kBAAkB;IAM3C;;;;OAIG;IACH,SAAS,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,WAAW,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAClE,SAAS,CAAC,WAAW,EAAE,iBAAiB,GAAG,OAAO;IAOlD,wEAAwE;IACxE,yBAAyB,IAAI,OAAO;IAMpC,OAAO,CAAC,QAAQ;IAIhB;;;OAGG;IACH,OAAO,CAAC,OAAO;CAuBhB;AAID;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAmBnE"}
|
|
@@ -44,6 +44,10 @@ export class ConfigService {
|
|
|
44
44
|
getTokenMetricsConfig() {
|
|
45
45
|
return this.getTyped("token-metrics");
|
|
46
46
|
}
|
|
47
|
+
/** Get Wiki Feedback configuration (type-safe). */
|
|
48
|
+
getWikiFeedbackConfig() {
|
|
49
|
+
return this.getTyped("wiki-feedback");
|
|
50
|
+
}
|
|
47
51
|
getConfig(contextName) {
|
|
48
52
|
return this.resolve(contextName);
|
|
49
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-service.js","sourceRoot":"","sources":["../../../src/application/config/config-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config-service.js","sourceRoot":"","sources":["../../../src/application/config/config-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wiki Feedback Application — Poll Service
|
|
3
|
+
*
|
|
4
|
+
* Background service that periodically scans monitored wiki pages
|
|
5
|
+
* for new comments. Delegates to WikiFeedbackUseCases.scan() for
|
|
6
|
+
* the actual detection and persistence logic.
|
|
7
|
+
*
|
|
8
|
+
* Follows the same pattern as AzurePollService: start/stop lifecycle,
|
|
9
|
+
* immediate first poll, configurable interval, error callbacks.
|
|
10
|
+
*
|
|
11
|
+
* SOLID: SRP — polling orchestration only (scan logic in use cases)
|
|
12
|
+
* SOLID: DIP — depends on use case abstraction
|
|
13
|
+
*/
|
|
14
|
+
import type { WikiFeedbackUseCases } from "./use-cases.js";
|
|
15
|
+
/** Notification emitted after a successful scan with new comments. */
|
|
16
|
+
export interface WikiPollNotification {
|
|
17
|
+
readonly pagesScanned: number;
|
|
18
|
+
readonly newCommentsFound: number;
|
|
19
|
+
readonly existingSkipped: number;
|
|
20
|
+
readonly autoRepliesFiltered: number;
|
|
21
|
+
readonly summary: string;
|
|
22
|
+
}
|
|
23
|
+
/** Dependencies for the wiki feedback poll service. */
|
|
24
|
+
export interface WikiPollServiceDeps {
|
|
25
|
+
readonly useCases: WikiFeedbackUseCases;
|
|
26
|
+
/** Callback invoked when new comments are detected. */
|
|
27
|
+
readonly onNewComments?: (notification: WikiPollNotification) => void;
|
|
28
|
+
/** Callback for error logging. */
|
|
29
|
+
readonly onError?: (error: string) => void;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Background polling service for wiki feedback detection.
|
|
33
|
+
* Call start() to begin periodic scanning, stop() to halt.
|
|
34
|
+
*/
|
|
35
|
+
export declare class WikiFeedbackPollService {
|
|
36
|
+
private readonly deps;
|
|
37
|
+
private readonly intervalSecs;
|
|
38
|
+
private timer;
|
|
39
|
+
private _running;
|
|
40
|
+
private _pollCount;
|
|
41
|
+
private _lastPollAt;
|
|
42
|
+
constructor(deps: WikiPollServiceDeps, intervalSecs: number);
|
|
43
|
+
/** Whether the service is currently running. */
|
|
44
|
+
get running(): boolean;
|
|
45
|
+
/** Number of completed poll cycles. */
|
|
46
|
+
get pollCount(): number;
|
|
47
|
+
/** ISO timestamp of the last poll. */
|
|
48
|
+
get lastPollAt(): string | undefined;
|
|
49
|
+
/** Start the polling loop. No-op if already running. */
|
|
50
|
+
start(): void;
|
|
51
|
+
/** Stop the polling loop. */
|
|
52
|
+
stop(): void;
|
|
53
|
+
/** Execute a single poll cycle. Exposed for testing. */
|
|
54
|
+
poll(): Promise<WikiPollNotification | undefined>;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=poll-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poll-service.d.ts","sourceRoot":"","sources":["../../../src/application/wiki-feedback/poll-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAI3D,sEAAsE;AACtE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,uDAAuD;AACvD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IACxC,uDAAuD;IACvD,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,YAAY,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACtE,kCAAkC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C;AAID;;;GAGG;AACH,qBAAa,uBAAuB;IAOhC,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAP/B,OAAO,CAAC,KAAK,CAA6C;IAC1D,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,WAAW,CAAqB;gBAGrB,IAAI,EAAE,mBAAmB,EACzB,YAAY,EAAE,MAAM;IAOvC,gDAAgD;IAChD,IAAI,OAAO,IAAI,OAAO,CAA0B;IAEhD,uCAAuC;IACvC,IAAI,SAAS,IAAI,MAAM,CAA4B;IAEnD,sCAAsC;IACtC,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAA6B;IAEjE,wDAAwD;IACxD,KAAK,IAAI,IAAI;IAkBb,6BAA6B;IAC7B,IAAI,IAAI,IAAI;IASZ,wDAAwD;IAClD,IAAI,IAAI,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;CAyBxD"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wiki Feedback Application — Poll Service
|
|
3
|
+
*
|
|
4
|
+
* Background service that periodically scans monitored wiki pages
|
|
5
|
+
* for new comments. Delegates to WikiFeedbackUseCases.scan() for
|
|
6
|
+
* the actual detection and persistence logic.
|
|
7
|
+
*
|
|
8
|
+
* Follows the same pattern as AzurePollService: start/stop lifecycle,
|
|
9
|
+
* immediate first poll, configurable interval, error callbacks.
|
|
10
|
+
*
|
|
11
|
+
* SOLID: SRP — polling orchestration only (scan logic in use cases)
|
|
12
|
+
* SOLID: DIP — depends on use case abstraction
|
|
13
|
+
*/
|
|
14
|
+
// ─── Poll Service ─────────────────────────────────────────────────────────────
|
|
15
|
+
/**
|
|
16
|
+
* Background polling service for wiki feedback detection.
|
|
17
|
+
* Call start() to begin periodic scanning, stop() to halt.
|
|
18
|
+
*/
|
|
19
|
+
export class WikiFeedbackPollService {
|
|
20
|
+
deps;
|
|
21
|
+
intervalSecs;
|
|
22
|
+
timer;
|
|
23
|
+
_running = false;
|
|
24
|
+
_pollCount = 0;
|
|
25
|
+
_lastPollAt;
|
|
26
|
+
constructor(deps, intervalSecs) {
|
|
27
|
+
this.deps = deps;
|
|
28
|
+
this.intervalSecs = intervalSecs;
|
|
29
|
+
if (intervalSecs < 60) {
|
|
30
|
+
throw new Error("Wiki poll interval must be at least 60 seconds");
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/** Whether the service is currently running. */
|
|
34
|
+
get running() { return this._running; }
|
|
35
|
+
/** Number of completed poll cycles. */
|
|
36
|
+
get pollCount() { return this._pollCount; }
|
|
37
|
+
/** ISO timestamp of the last poll. */
|
|
38
|
+
get lastPollAt() { return this._lastPollAt; }
|
|
39
|
+
/** Start the polling loop. No-op if already running. */
|
|
40
|
+
start() {
|
|
41
|
+
if (this._running)
|
|
42
|
+
return;
|
|
43
|
+
this._running = true;
|
|
44
|
+
// Run immediately, then on interval
|
|
45
|
+
this.poll().catch((err) => {
|
|
46
|
+
this.deps.onError?.(`Wiki poll failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
47
|
+
});
|
|
48
|
+
this.timer = setInterval(() => {
|
|
49
|
+
this.poll().catch((err) => {
|
|
50
|
+
this.deps.onError?.(`Wiki poll failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
51
|
+
});
|
|
52
|
+
}, this.intervalSecs * 1000);
|
|
53
|
+
}
|
|
54
|
+
/** Stop the polling loop. */
|
|
55
|
+
stop() {
|
|
56
|
+
if (!this._running)
|
|
57
|
+
return;
|
|
58
|
+
this._running = false;
|
|
59
|
+
if (this.timer !== undefined) {
|
|
60
|
+
clearInterval(this.timer);
|
|
61
|
+
this.timer = undefined;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/** Execute a single poll cycle. Exposed for testing. */
|
|
65
|
+
async poll() {
|
|
66
|
+
const result = await this.deps.useCases.scan();
|
|
67
|
+
this._pollCount++;
|
|
68
|
+
this._lastPollAt = new Date().toISOString();
|
|
69
|
+
if (!result.success) {
|
|
70
|
+
this.deps.onError?.(`Scan failed: ${result.error}`);
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
const scan = result.data;
|
|
74
|
+
if (scan.newCommentsFound === 0)
|
|
75
|
+
return undefined;
|
|
76
|
+
const notification = {
|
|
77
|
+
pagesScanned: scan.pagesScanned,
|
|
78
|
+
newCommentsFound: scan.newCommentsFound,
|
|
79
|
+
existingSkipped: scan.existingSkipped,
|
|
80
|
+
autoRepliesFiltered: scan.autoRepliesFiltered,
|
|
81
|
+
summary: `${scan.newCommentsFound} new wiki comment(s) detected across ${scan.pagesScanned} page(s)`,
|
|
82
|
+
};
|
|
83
|
+
this.deps.onNewComments?.(notification);
|
|
84
|
+
return notification;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=poll-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poll-service.js","sourceRoot":"","sources":["../../../src/application/wiki-feedback/poll-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wiki Feedback Application — Use Cases
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates wiki feedback operations: scan pages for new comments,
|
|
5
|
+
* list pending items, triage with type/priority, create kanban cards,
|
|
6
|
+
* and dismiss irrelevant feedback. Uses domain entities and repository
|
|
7
|
+
* ports — zero infrastructure dependencies.
|
|
8
|
+
*
|
|
9
|
+
* SOLID: SRP — wiki feedback workflow orchestration only
|
|
10
|
+
* SOLID: DIP — depends on domain ports and repository interfaces
|
|
11
|
+
* DDD: Application Service pattern with Result returns
|
|
12
|
+
*/
|
|
13
|
+
import type { Result } from "../../domain/shared/value-objects.js";
|
|
14
|
+
import type { WikiFeedbackRepository } from "../../domain/wiki-feedback/repositories.js";
|
|
15
|
+
import type { WikiClientPort } from "../../domain/wiki-feedback/ports.js";
|
|
16
|
+
import type { MonitoredPageConfig } from "../../domain/config/value-objects.js";
|
|
17
|
+
/** Response DTO for a single feedback item. */
|
|
18
|
+
export interface WikiFeedbackResponse {
|
|
19
|
+
readonly id: string;
|
|
20
|
+
readonly azureCommentId: number;
|
|
21
|
+
readonly commentText: string;
|
|
22
|
+
readonly authorDisplayName: string;
|
|
23
|
+
readonly authorUniqueName: string;
|
|
24
|
+
readonly pageId: number;
|
|
25
|
+
readonly pagePath: string;
|
|
26
|
+
readonly status: string;
|
|
27
|
+
readonly feedbackType: string | null;
|
|
28
|
+
readonly priority: string | null;
|
|
29
|
+
readonly cardId: string | null;
|
|
30
|
+
readonly dismissReason: string | null;
|
|
31
|
+
readonly detectedAt: string;
|
|
32
|
+
readonly triagedAt: string | null;
|
|
33
|
+
readonly resolvedAt: string | null;
|
|
34
|
+
readonly commentCreatedDate: string;
|
|
35
|
+
}
|
|
36
|
+
/** Request DTO for triaging a feedback item. */
|
|
37
|
+
export interface TriageFeedbackRequest {
|
|
38
|
+
readonly feedbackId: string;
|
|
39
|
+
readonly feedbackType: string;
|
|
40
|
+
readonly priority: string;
|
|
41
|
+
}
|
|
42
|
+
/** Request DTO for creating a card from feedback. */
|
|
43
|
+
export interface CreateCardFromFeedbackRequest {
|
|
44
|
+
readonly feedbackId: string;
|
|
45
|
+
readonly title?: string;
|
|
46
|
+
readonly description?: string;
|
|
47
|
+
readonly epicId?: string;
|
|
48
|
+
}
|
|
49
|
+
/** Request DTO for dismissing a feedback item. */
|
|
50
|
+
export interface DismissFeedbackRequest {
|
|
51
|
+
readonly feedbackId: string;
|
|
52
|
+
readonly reason: string;
|
|
53
|
+
}
|
|
54
|
+
/** Summary returned after a scan operation. */
|
|
55
|
+
export interface ScanResult {
|
|
56
|
+
readonly pagesScanned: number;
|
|
57
|
+
readonly newCommentsFound: number;
|
|
58
|
+
readonly existingSkipped: number;
|
|
59
|
+
readonly autoRepliesFiltered: number;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Callback to create a kanban card from feedback.
|
|
63
|
+
* Injected from the kanban BC — avoids direct cross-context dependency.
|
|
64
|
+
* Returns the created card ID on success.
|
|
65
|
+
*/
|
|
66
|
+
export type CreateCardCallback = (params: {
|
|
67
|
+
readonly title: string;
|
|
68
|
+
readonly workspace: string;
|
|
69
|
+
readonly priority?: string;
|
|
70
|
+
readonly description?: string;
|
|
71
|
+
readonly epicId?: string;
|
|
72
|
+
}) => Promise<Result<{
|
|
73
|
+
readonly id: string;
|
|
74
|
+
}>>;
|
|
75
|
+
export interface WikiFeedbackUseCasesDeps {
|
|
76
|
+
readonly feedbackRepo: WikiFeedbackRepository;
|
|
77
|
+
readonly wikiClient: WikiClientPort;
|
|
78
|
+
readonly createCard: CreateCardCallback;
|
|
79
|
+
readonly workspace: string;
|
|
80
|
+
readonly wikiIdentifier: string;
|
|
81
|
+
readonly monitoredPages: readonly MonitoredPageConfig[];
|
|
82
|
+
readonly autoReply: boolean;
|
|
83
|
+
readonly autoReplyPrefix: string;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Application use cases for wiki feedback processing.
|
|
87
|
+
* Orchestrates scan → triage → card creation / dismiss lifecycle.
|
|
88
|
+
*/
|
|
89
|
+
export declare class WikiFeedbackUseCases {
|
|
90
|
+
private readonly deps;
|
|
91
|
+
constructor(deps: WikiFeedbackUseCasesDeps);
|
|
92
|
+
/**
|
|
93
|
+
* Scan all monitored wiki pages for new comments.
|
|
94
|
+
* Creates WikiFeedbackItem for each new comment not yet tracked.
|
|
95
|
+
* Filters out auto-reply comments posted by JARVIS.
|
|
96
|
+
*/
|
|
97
|
+
scan(): Promise<Result<ScanResult>>;
|
|
98
|
+
/** List pending (untriaged) feedback items. */
|
|
99
|
+
listPending(limit?: number): Promise<Result<readonly WikiFeedbackResponse[]>>;
|
|
100
|
+
/** List feedback items by status. */
|
|
101
|
+
listByStatus(status: string, limit?: number): Promise<Result<readonly WikiFeedbackResponse[]>>;
|
|
102
|
+
/** List recent feedback items across all statuses. */
|
|
103
|
+
listRecent(limit?: number): Promise<Result<readonly WikiFeedbackResponse[]>>;
|
|
104
|
+
/** Triage a pending feedback item: assign type and priority. */
|
|
105
|
+
triage(request: TriageFeedbackRequest): Promise<Result<WikiFeedbackResponse>>;
|
|
106
|
+
/**
|
|
107
|
+
* Create a kanban card from a triaged feedback item.
|
|
108
|
+
* Optionally posts an auto-reply on the wiki page.
|
|
109
|
+
*/
|
|
110
|
+
createCard(request: CreateCardFromFeedbackRequest): Promise<Result<WikiFeedbackResponse>>;
|
|
111
|
+
/** Dismiss a feedback item with a reason. */
|
|
112
|
+
dismiss(request: DismissFeedbackRequest): Promise<Result<WikiFeedbackResponse>>;
|
|
113
|
+
private postAutoReply;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=use-cases.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-cases.d.ts","sourceRoot":"","sources":["../../../src/application/wiki-feedback/use-cases.ts"],"names":[],"mappings":"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"}
|