@agimon-ai/po-core 0.0.0-alpha.64 → 0.0.0-alpha.65

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.
@@ -131,6 +131,7 @@ function templateRailStub(options = {}) {
131
131
  directories: ["/Users/dev/workspace", "/Users/dev/notes"]
132
132
  })),
133
133
  removePendingSetup: record("removePendingSetup", Promise.resolve(void 0)),
134
+ openHome: record("openHome"),
134
135
  openSettings: record("openSettings"),
135
136
  openRemoteAccess: record("openRemoteAccess"),
136
137
  turnRemoteAccessOff: record("turnRemoteAccessOff"),
@@ -144,6 +145,7 @@ function templateRailStub(options = {}) {
144
145
  deviceCount: 0
145
146
  },
146
147
  pluginContent: null,
148
+ homeActive: options.homeActive ?? false,
147
149
  ...options.addWorkspace === void 0 ? {} : { addWorkspace: options.addWorkspace },
148
150
  actions: {
149
151
  ...recorded,
@@ -1 +1 @@
1
- {"version":3,"file":"templateRail.cjs","names":[],"sources":["../../../../../src/web/services/testing/templateRail.ts"],"sourcesContent":["import type {\n WebTemplateRail,\n WebTemplateRailActions,\n WebTemplateRailSession,\n WebTemplateRailWorkspace,\n} from '../../types/template';\n\n/**\n * The rail a template receives, built for a test or story.\n *\n * Two workspaces with sessions that exercise the card's branches (a branch\n * with a dirty star, a profile avatar, a nested child, workflow sessions in\n * each state, a pending setup), plus\n * actions that record what the template asked for. Override any part.\n */\n\nexport interface RecordedRailAction {\n action: keyof WebTemplateRailActions;\n args: readonly unknown[];\n}\n\nexport interface TemplateRailFixture {\n rail: WebTemplateRail;\n /** Every action the template called, in order. */\n readonly actions: readonly RecordedRailAction[];\n}\n\nexport interface TemplateRailOptions {\n workspaces?: readonly WebTemplateRailWorkspace[];\n addWorkspace?: WebTemplateRail['addWorkspace'];\n remote?: WebTemplateRail['remote'];\n actions?: Partial<WebTemplateRailActions>;\n}\n\n/** A tiny transparent PNG, so avatar markup renders an image without a network request. */\nconst AVATAR_URL =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=';\n\nexport function railSession(overrides: Partial<WebTemplateRailSession> & { id: string }): WebTemplateRailSession {\n return {\n name: overrides.id,\n ordinal: 1,\n active: false,\n nested: false,\n status: 'idle · done 2m ago',\n awaitingInput: false,\n restarting: false,\n pendingSetups: [],\n ...overrides,\n };\n}\n\nexport function defaultRailWorkspaces(): WebTemplateRailWorkspace[] {\n return [\n {\n id: 'po',\n name: 'po',\n root: '/Users/dev/workspace/po',\n available: true,\n legacy: false,\n sessions: [\n railSession({\n id: 'rail',\n name: 'rail redesign',\n ordinal: 1,\n active: true,\n status: 'running · 3m',\n git: { branch: 'main', dirty: true },\n profile: { name: 'ponytail', label: 'Ponytail', initials: 'PO', avatarUrl: AVATAR_URL },\n }),\n railSession({\n id: 'rail-worktree',\n name: 'worktree child',\n ordinal: 2,\n nested: true,\n provenance: 'worktree',\n git: { branch: 'feature/rail', dirty: false },\n profile: { name: 'reviewer', label: 'Reviewer', initials: 'RE' },\n pendingSetups: [\n {\n id: 'setup',\n name: 'docs worktree',\n status: 'automatic worktree setup failed',\n failed: true,\n recovery: 'Resolve the Git setup, then retry the authenticated conversation.',\n },\n ],\n }),\n railSession({\n id: 'rail-workflow',\n name: 'release-hardening',\n ordinal: 3,\n nested: true,\n provenance: 'workflow-session',\n status: 'workflow · build › edit token.ts · 4m',\n }),\n railSession({\n id: 'rail-workflow-failed',\n name: 'nightly',\n ordinal: 4,\n nested: true,\n provenance: 'workflow-session',\n status: 'workflow failed · test',\n awaitingInput: true,\n }),\n railSession({\n id: 'rail-workflow-done',\n name: 'hotfix',\n ordinal: 5,\n nested: true,\n provenance: 'workflow-session',\n status: 'stopped · open to wake',\n }),\n ],\n },\n {\n id: 'notes',\n name: 'Notes',\n root: '/Users/dev/.po/workspace/Notes',\n available: true,\n legacy: false,\n sessions: [],\n },\n ];\n}\n\nexport function templateRailStub(options: TemplateRailOptions = {}): TemplateRailFixture {\n const actions: RecordedRailAction[] = [];\n const record =\n <Name extends keyof WebTemplateRailActions>(action: Name, result?: unknown) =>\n (...args: unknown[]) => {\n actions.push({ action, args });\n return result;\n };\n const recorded: WebTemplateRailActions = {\n openSession: record('openSession'),\n renameSession: record('renameSession'),\n setSessionGroups: record(\n 'setSessionGroups',\n Promise.resolve(undefined),\n ) as WebTemplateRailActions['setSessionGroups'],\n renameGroup: record('renameGroup', Promise.resolve(undefined)) as WebTemplateRailActions['renameGroup'],\n deleteGroup: record('deleteGroup', Promise.resolve(undefined)) as WebTemplateRailActions['deleteGroup'],\n restartSession: record('restartSession'),\n removeSession: record('removeSession', Promise.resolve(undefined)) as WebTemplateRailActions['removeSession'],\n resumeSession: record('resumeSession'),\n createSession: record('createSession'),\n resumeInWorkspace: record('resumeInWorkspace'),\n openWorkspaceSettings: record('openWorkspaceSettings'),\n deleteWorkspace: record('deleteWorkspace', Promise.resolve(undefined)) as WebTemplateRailActions['deleteWorkspace'],\n openAddWorkspace: record('openAddWorkspace'),\n closeAddWorkspace: record('closeAddWorkspace'),\n addWorkspace: record('addWorkspace', Promise.resolve(undefined)) as WebTemplateRailActions['addWorkspace'],\n discoverWorkspaces: record(\n 'discoverWorkspaces',\n Promise.resolve({ unsupported: true }),\n ) as WebTemplateRailActions['discoverWorkspaces'],\n addDeclaredWorkspaces: record(\n 'addDeclaredWorkspaces',\n Promise.resolve({ results: [] }),\n ) as WebTemplateRailActions['addDeclaredWorkspaces'],\n searchDirectories: record(\n 'searchDirectories',\n Promise.resolve(['/Users/dev/workspace/po', '/Users/dev/workspace/docs']),\n ) as WebTemplateRailActions['searchDirectories'],\n listDirectory: record(\n 'listDirectory',\n Promise.resolve({\n path: '/Users/dev',\n parent: '/Users',\n directories: ['/Users/dev/workspace', '/Users/dev/notes'],\n }),\n ) as WebTemplateRailActions['listDirectory'],\n removePendingSetup: record(\n 'removePendingSetup',\n Promise.resolve(undefined),\n ) as WebTemplateRailActions['removePendingSetup'],\n openSettings: record('openSettings'),\n openRemoteAccess: record('openRemoteAccess'),\n turnRemoteAccessOff: record('turnRemoteAccessOff'),\n renderSessionMenuItems: () => null,\n };\n return {\n rail: {\n workspaces: options.workspaces ?? defaultRailWorkspaces(),\n remote: options.remote ?? { status: 'off', deviceCount: 0 },\n pluginContent: null,\n ...(options.addWorkspace === undefined ? {} : { addWorkspace: options.addWorkspace }),\n actions: { ...recorded, ...options.actions },\n },\n actions,\n };\n}\n"],"mappings":";;AAmCA,MAAM,aACJ;AAEF,SAAgB,YAAY,WAAqF;CAC/G,OAAO;EACL,MAAM,UAAU;EAChB,SAAS;EACT,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,eAAe;EACf,YAAY;EACZ,eAAe,CAAC;EAChB,GAAG;CACL;AACF;AAEA,SAAgB,wBAAoD;CAClE,OAAO,CACL;EACE,IAAI;EACJ,MAAM;EACN,MAAM;EACN,WAAW;EACX,QAAQ;EACR,UAAU;GACR,YAAY;IACV,IAAI;IACJ,MAAM;IACN,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,KAAK;KAAE,QAAQ;KAAQ,OAAO;IAAK;IACnC,SAAS;KAAE,MAAM;KAAY,OAAO;KAAY,UAAU;KAAM,WAAW;IAAW;GACxF,CAAC;GACD,YAAY;IACV,IAAI;IACJ,MAAM;IACN,SAAS;IACT,QAAQ;IACR,YAAY;IACZ,KAAK;KAAE,QAAQ;KAAgB,OAAO;IAAM;IAC5C,SAAS;KAAE,MAAM;KAAY,OAAO;KAAY,UAAU;IAAK;IAC/D,eAAe,CACb;KACE,IAAI;KACJ,MAAM;KACN,QAAQ;KACR,QAAQ;KACR,UAAU;IACZ,CACF;GACF,CAAC;GACD,YAAY;IACV,IAAI;IACJ,MAAM;IACN,SAAS;IACT,QAAQ;IACR,YAAY;IACZ,QAAQ;GACV,CAAC;GACD,YAAY;IACV,IAAI;IACJ,MAAM;IACN,SAAS;IACT,QAAQ;IACR,YAAY;IACZ,QAAQ;IACR,eAAe;GACjB,CAAC;GACD,YAAY;IACV,IAAI;IACJ,MAAM;IACN,SAAS;IACT,QAAQ;IACR,YAAY;IACZ,QAAQ;GACV,CAAC;EACH;CACF,GACA;EACE,IAAI;EACJ,MAAM;EACN,MAAM;EACN,WAAW;EACX,QAAQ;EACR,UAAU,CAAC;CACb,CACF;AACF;AAEA,SAAgB,iBAAiB,UAA+B,CAAC,GAAwB;CACvF,MAAM,UAAgC,CAAC;CACvC,MAAM,UACwC,QAAc,YACzD,GAAG,SAAoB;EACtB,QAAQ,KAAK;GAAE;GAAQ;EAAK,CAAC;EAC7B,OAAO;CACT;CACF,MAAM,WAAmC;EACvC,aAAa,OAAO,aAAa;EACjC,eAAe,OAAO,eAAe;EACrC,kBAAkB,OAChB,oBACA,QAAQ,QAAQ,KAAA,CAAS,CAC3B;EACA,aAAa,OAAO,eAAe,QAAQ,QAAQ,KAAA,CAAS,CAAC;EAC7D,aAAa,OAAO,eAAe,QAAQ,QAAQ,KAAA,CAAS,CAAC;EAC7D,gBAAgB,OAAO,gBAAgB;EACvC,eAAe,OAAO,iBAAiB,QAAQ,QAAQ,KAAA,CAAS,CAAC;EACjE,eAAe,OAAO,eAAe;EACrC,eAAe,OAAO,eAAe;EACrC,mBAAmB,OAAO,mBAAmB;EAC7C,uBAAuB,OAAO,uBAAuB;EACrD,iBAAiB,OAAO,mBAAmB,QAAQ,QAAQ,KAAA,CAAS,CAAC;EACrE,kBAAkB,OAAO,kBAAkB;EAC3C,mBAAmB,OAAO,mBAAmB;EAC7C,cAAc,OAAO,gBAAgB,QAAQ,QAAQ,KAAA,CAAS,CAAC;EAC/D,oBAAoB,OAClB,sBACA,QAAQ,QAAQ,EAAE,aAAa,KAAK,CAAC,CACvC;EACA,uBAAuB,OACrB,yBACA,QAAQ,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC,CACjC;EACA,mBAAmB,OACjB,qBACA,QAAQ,QAAQ,CAAC,2BAA2B,2BAA2B,CAAC,CAC1E;EACA,eAAe,OACb,iBACA,QAAQ,QAAQ;GACd,MAAM;GACN,QAAQ;GACR,aAAa,CAAC,wBAAwB,kBAAkB;EAC1D,CAAC,CACH;EACA,oBAAoB,OAClB,sBACA,QAAQ,QAAQ,KAAA,CAAS,CAC3B;EACA,cAAc,OAAO,cAAc;EACnC,kBAAkB,OAAO,kBAAkB;EAC3C,qBAAqB,OAAO,qBAAqB;EACjD,8BAA8B;CAChC;CACA,OAAO;EACL,MAAM;GACJ,YAAY,QAAQ,cAAc,sBAAsB;GACxD,QAAQ,QAAQ,UAAU;IAAE,QAAQ;IAAO,aAAa;GAAE;GAC1D,eAAe;GACf,GAAI,QAAQ,iBAAiB,KAAA,IAAY,CAAC,IAAI,EAAE,cAAc,QAAQ,aAAa;GACnF,SAAS;IAAE,GAAG;IAAU,GAAG,QAAQ;GAAQ;EAC7C;EACA;CACF;AACF"}
1
+ {"version":3,"file":"templateRail.cjs","names":[],"sources":["../../../../../src/web/services/testing/templateRail.ts"],"sourcesContent":["import type {\n WebTemplateRail,\n WebTemplateRailActions,\n WebTemplateRailSession,\n WebTemplateRailWorkspace,\n} from '../../types/template';\n\n/**\n * The rail a template receives, built for a test or story.\n *\n * Two workspaces with sessions that exercise the card's branches (a branch\n * with a dirty star, a profile avatar, a nested child, workflow sessions in\n * each state, a pending setup), plus\n * actions that record what the template asked for. Override any part.\n */\n\nexport interface RecordedRailAction {\n action: keyof WebTemplateRailActions;\n args: readonly unknown[];\n}\n\nexport interface TemplateRailFixture {\n rail: WebTemplateRail;\n /** Every action the template called, in order. */\n readonly actions: readonly RecordedRailAction[];\n}\n\nexport interface TemplateRailOptions {\n workspaces?: readonly WebTemplateRailWorkspace[];\n addWorkspace?: WebTemplateRail['addWorkspace'];\n remote?: WebTemplateRail['remote'];\n homeActive?: boolean;\n actions?: Partial<WebTemplateRailActions>;\n}\n\n/** A tiny transparent PNG, so avatar markup renders an image without a network request. */\nconst AVATAR_URL =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=';\n\nexport function railSession(overrides: Partial<WebTemplateRailSession> & { id: string }): WebTemplateRailSession {\n return {\n name: overrides.id,\n ordinal: 1,\n active: false,\n nested: false,\n status: 'idle · done 2m ago',\n awaitingInput: false,\n restarting: false,\n pendingSetups: [],\n ...overrides,\n };\n}\n\nexport function defaultRailWorkspaces(): WebTemplateRailWorkspace[] {\n return [\n {\n id: 'po',\n name: 'po',\n root: '/Users/dev/workspace/po',\n available: true,\n legacy: false,\n sessions: [\n railSession({\n id: 'rail',\n name: 'rail redesign',\n ordinal: 1,\n active: true,\n status: 'running · 3m',\n git: { branch: 'main', dirty: true },\n profile: { name: 'ponytail', label: 'Ponytail', initials: 'PO', avatarUrl: AVATAR_URL },\n }),\n railSession({\n id: 'rail-worktree',\n name: 'worktree child',\n ordinal: 2,\n nested: true,\n provenance: 'worktree',\n git: { branch: 'feature/rail', dirty: false },\n profile: { name: 'reviewer', label: 'Reviewer', initials: 'RE' },\n pendingSetups: [\n {\n id: 'setup',\n name: 'docs worktree',\n status: 'automatic worktree setup failed',\n failed: true,\n recovery: 'Resolve the Git setup, then retry the authenticated conversation.',\n },\n ],\n }),\n railSession({\n id: 'rail-workflow',\n name: 'release-hardening',\n ordinal: 3,\n nested: true,\n provenance: 'workflow-session',\n status: 'workflow · build › edit token.ts · 4m',\n }),\n railSession({\n id: 'rail-workflow-failed',\n name: 'nightly',\n ordinal: 4,\n nested: true,\n provenance: 'workflow-session',\n status: 'workflow failed · test',\n awaitingInput: true,\n }),\n railSession({\n id: 'rail-workflow-done',\n name: 'hotfix',\n ordinal: 5,\n nested: true,\n provenance: 'workflow-session',\n status: 'stopped · open to wake',\n }),\n ],\n },\n {\n id: 'notes',\n name: 'Notes',\n root: '/Users/dev/.po/workspace/Notes',\n available: true,\n legacy: false,\n sessions: [],\n },\n ];\n}\n\nexport function templateRailStub(options: TemplateRailOptions = {}): TemplateRailFixture {\n const actions: RecordedRailAction[] = [];\n const record =\n <Name extends keyof WebTemplateRailActions>(action: Name, result?: unknown) =>\n (...args: unknown[]) => {\n actions.push({ action, args });\n return result;\n };\n const recorded: WebTemplateRailActions = {\n openSession: record('openSession'),\n renameSession: record('renameSession'),\n setSessionGroups: record(\n 'setSessionGroups',\n Promise.resolve(undefined),\n ) as WebTemplateRailActions['setSessionGroups'],\n renameGroup: record('renameGroup', Promise.resolve(undefined)) as WebTemplateRailActions['renameGroup'],\n deleteGroup: record('deleteGroup', Promise.resolve(undefined)) as WebTemplateRailActions['deleteGroup'],\n restartSession: record('restartSession'),\n removeSession: record('removeSession', Promise.resolve(undefined)) as WebTemplateRailActions['removeSession'],\n resumeSession: record('resumeSession'),\n createSession: record('createSession'),\n resumeInWorkspace: record('resumeInWorkspace'),\n openWorkspaceSettings: record('openWorkspaceSettings'),\n deleteWorkspace: record('deleteWorkspace', Promise.resolve(undefined)) as WebTemplateRailActions['deleteWorkspace'],\n openAddWorkspace: record('openAddWorkspace'),\n closeAddWorkspace: record('closeAddWorkspace'),\n addWorkspace: record('addWorkspace', Promise.resolve(undefined)) as WebTemplateRailActions['addWorkspace'],\n discoverWorkspaces: record(\n 'discoverWorkspaces',\n Promise.resolve({ unsupported: true }),\n ) as WebTemplateRailActions['discoverWorkspaces'],\n addDeclaredWorkspaces: record(\n 'addDeclaredWorkspaces',\n Promise.resolve({ results: [] }),\n ) as WebTemplateRailActions['addDeclaredWorkspaces'],\n searchDirectories: record(\n 'searchDirectories',\n Promise.resolve(['/Users/dev/workspace/po', '/Users/dev/workspace/docs']),\n ) as WebTemplateRailActions['searchDirectories'],\n listDirectory: record(\n 'listDirectory',\n Promise.resolve({\n path: '/Users/dev',\n parent: '/Users',\n directories: ['/Users/dev/workspace', '/Users/dev/notes'],\n }),\n ) as WebTemplateRailActions['listDirectory'],\n removePendingSetup: record(\n 'removePendingSetup',\n Promise.resolve(undefined),\n ) as WebTemplateRailActions['removePendingSetup'],\n openHome: record('openHome'),\n openSettings: record('openSettings'),\n openRemoteAccess: record('openRemoteAccess'),\n turnRemoteAccessOff: record('turnRemoteAccessOff'),\n renderSessionMenuItems: () => null,\n };\n return {\n rail: {\n workspaces: options.workspaces ?? defaultRailWorkspaces(),\n remote: options.remote ?? { status: 'off', deviceCount: 0 },\n pluginContent: null,\n homeActive: options.homeActive ?? false,\n ...(options.addWorkspace === undefined ? {} : { addWorkspace: options.addWorkspace }),\n actions: { ...recorded, ...options.actions },\n },\n actions,\n };\n}\n"],"mappings":"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"}
@@ -21,6 +21,7 @@ export interface TemplateRailOptions {
21
21
  workspaces?: readonly WebTemplateRailWorkspace[];
22
22
  addWorkspace?: WebTemplateRail['addWorkspace'];
23
23
  remote?: WebTemplateRail['remote'];
24
+ homeActive?: boolean;
24
25
  actions?: Partial<WebTemplateRailActions>;
25
26
  }
26
27
  export declare function railSession(overrides: Partial<WebTemplateRailSession> & {
@@ -1 +1 @@
1
- {"version":3,"file":"templateRail.d.mts","names":[],"sources":["../../../../../src/web/services/testing/templateRail.ts"],"mappings":";;;;;;;;;;iBAgBiB;EACf,cAAc;EACd;;iBAGe;EACf,MAAM;;WAEG,kBAAkB;;iBAGZ;EACf,sBAAsB;EACtB,eAAe;EACf,SAAS;EACT,UAAU,QAAQ;;wBAOJ,YAAY,WAAW,QAAQ;EAA4B;IAAe;wBAc1E,yBAAyB;wBA0EzB,iBAAiB,UAAS,sBAA2B"}
1
+ {"version":3,"file":"templateRail.d.mts","names":[],"sources":["../../../../../src/web/services/testing/templateRail.ts"],"mappings":";;;;;;;;;;iBAgBiB;EACf,cAAc;EACd;;iBAGe;EACf,MAAM;;WAEG,kBAAkB;;iBAGZ;EACf,sBAAsB;EACtB,eAAe;EACf,SAAS;EACT;EACA,UAAU,QAAQ;;wBAOJ,YAAY,WAAW,QAAQ;EAA4B;IAAe;wBAc1E,yBAAyB;wBA0EzB,iBAAiB,UAAS,sBAA2B"}
@@ -131,6 +131,7 @@ function templateRailStub(options = {}) {
131
131
  directories: ["/Users/dev/workspace", "/Users/dev/notes"]
132
132
  })),
133
133
  removePendingSetup: record("removePendingSetup", Promise.resolve(void 0)),
134
+ openHome: record("openHome"),
134
135
  openSettings: record("openSettings"),
135
136
  openRemoteAccess: record("openRemoteAccess"),
136
137
  turnRemoteAccessOff: record("turnRemoteAccessOff"),
@@ -144,6 +145,7 @@ function templateRailStub(options = {}) {
144
145
  deviceCount: 0
145
146
  },
146
147
  pluginContent: null,
148
+ homeActive: options.homeActive ?? false,
147
149
  ...options.addWorkspace === void 0 ? {} : { addWorkspace: options.addWorkspace },
148
150
  actions: {
149
151
  ...recorded,
@@ -1 +1 @@
1
- {"version":3,"file":"templateRail.mjs","names":[],"sources":["../../../../../src/web/services/testing/templateRail.ts"],"sourcesContent":["import type {\n WebTemplateRail,\n WebTemplateRailActions,\n WebTemplateRailSession,\n WebTemplateRailWorkspace,\n} from '../../types/template';\n\n/**\n * The rail a template receives, built for a test or story.\n *\n * Two workspaces with sessions that exercise the card's branches (a branch\n * with a dirty star, a profile avatar, a nested child, workflow sessions in\n * each state, a pending setup), plus\n * actions that record what the template asked for. Override any part.\n */\n\nexport interface RecordedRailAction {\n action: keyof WebTemplateRailActions;\n args: readonly unknown[];\n}\n\nexport interface TemplateRailFixture {\n rail: WebTemplateRail;\n /** Every action the template called, in order. */\n readonly actions: readonly RecordedRailAction[];\n}\n\nexport interface TemplateRailOptions {\n workspaces?: readonly WebTemplateRailWorkspace[];\n addWorkspace?: WebTemplateRail['addWorkspace'];\n remote?: WebTemplateRail['remote'];\n actions?: Partial<WebTemplateRailActions>;\n}\n\n/** A tiny transparent PNG, so avatar markup renders an image without a network request. */\nconst AVATAR_URL =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=';\n\nexport function railSession(overrides: Partial<WebTemplateRailSession> & { id: string }): WebTemplateRailSession {\n return {\n name: overrides.id,\n ordinal: 1,\n active: false,\n nested: false,\n status: 'idle · done 2m ago',\n awaitingInput: false,\n restarting: false,\n pendingSetups: [],\n ...overrides,\n };\n}\n\nexport function defaultRailWorkspaces(): WebTemplateRailWorkspace[] {\n return [\n {\n id: 'po',\n name: 'po',\n root: '/Users/dev/workspace/po',\n available: true,\n legacy: false,\n sessions: [\n railSession({\n id: 'rail',\n name: 'rail redesign',\n ordinal: 1,\n active: true,\n status: 'running · 3m',\n git: { branch: 'main', dirty: true },\n profile: { name: 'ponytail', label: 'Ponytail', initials: 'PO', avatarUrl: AVATAR_URL },\n }),\n railSession({\n id: 'rail-worktree',\n name: 'worktree child',\n ordinal: 2,\n nested: true,\n provenance: 'worktree',\n git: { branch: 'feature/rail', dirty: false },\n profile: { name: 'reviewer', label: 'Reviewer', initials: 'RE' },\n pendingSetups: [\n {\n id: 'setup',\n name: 'docs worktree',\n status: 'automatic worktree setup failed',\n failed: true,\n recovery: 'Resolve the Git setup, then retry the authenticated conversation.',\n },\n ],\n }),\n railSession({\n id: 'rail-workflow',\n name: 'release-hardening',\n ordinal: 3,\n nested: true,\n provenance: 'workflow-session',\n status: 'workflow · build › edit token.ts · 4m',\n }),\n railSession({\n id: 'rail-workflow-failed',\n name: 'nightly',\n ordinal: 4,\n nested: true,\n provenance: 'workflow-session',\n status: 'workflow failed · test',\n awaitingInput: true,\n }),\n railSession({\n id: 'rail-workflow-done',\n name: 'hotfix',\n ordinal: 5,\n nested: true,\n provenance: 'workflow-session',\n status: 'stopped · open to wake',\n }),\n ],\n },\n {\n id: 'notes',\n name: 'Notes',\n root: '/Users/dev/.po/workspace/Notes',\n available: true,\n legacy: false,\n sessions: [],\n },\n ];\n}\n\nexport function templateRailStub(options: TemplateRailOptions = {}): TemplateRailFixture {\n const actions: RecordedRailAction[] = [];\n const record =\n <Name extends keyof WebTemplateRailActions>(action: Name, result?: unknown) =>\n (...args: unknown[]) => {\n actions.push({ action, args });\n return result;\n };\n const recorded: WebTemplateRailActions = {\n openSession: record('openSession'),\n renameSession: record('renameSession'),\n setSessionGroups: record(\n 'setSessionGroups',\n Promise.resolve(undefined),\n ) as WebTemplateRailActions['setSessionGroups'],\n renameGroup: record('renameGroup', Promise.resolve(undefined)) as WebTemplateRailActions['renameGroup'],\n deleteGroup: record('deleteGroup', Promise.resolve(undefined)) as WebTemplateRailActions['deleteGroup'],\n restartSession: record('restartSession'),\n removeSession: record('removeSession', Promise.resolve(undefined)) as WebTemplateRailActions['removeSession'],\n resumeSession: record('resumeSession'),\n createSession: record('createSession'),\n resumeInWorkspace: record('resumeInWorkspace'),\n openWorkspaceSettings: record('openWorkspaceSettings'),\n deleteWorkspace: record('deleteWorkspace', Promise.resolve(undefined)) as WebTemplateRailActions['deleteWorkspace'],\n openAddWorkspace: record('openAddWorkspace'),\n closeAddWorkspace: record('closeAddWorkspace'),\n addWorkspace: record('addWorkspace', Promise.resolve(undefined)) as WebTemplateRailActions['addWorkspace'],\n discoverWorkspaces: record(\n 'discoverWorkspaces',\n Promise.resolve({ unsupported: true }),\n ) as WebTemplateRailActions['discoverWorkspaces'],\n addDeclaredWorkspaces: record(\n 'addDeclaredWorkspaces',\n Promise.resolve({ results: [] }),\n ) as WebTemplateRailActions['addDeclaredWorkspaces'],\n searchDirectories: record(\n 'searchDirectories',\n Promise.resolve(['/Users/dev/workspace/po', '/Users/dev/workspace/docs']),\n ) as WebTemplateRailActions['searchDirectories'],\n listDirectory: record(\n 'listDirectory',\n Promise.resolve({\n path: '/Users/dev',\n parent: '/Users',\n directories: ['/Users/dev/workspace', '/Users/dev/notes'],\n }),\n ) as WebTemplateRailActions['listDirectory'],\n removePendingSetup: record(\n 'removePendingSetup',\n Promise.resolve(undefined),\n ) as WebTemplateRailActions['removePendingSetup'],\n openSettings: record('openSettings'),\n openRemoteAccess: record('openRemoteAccess'),\n turnRemoteAccessOff: record('turnRemoteAccessOff'),\n renderSessionMenuItems: () => null,\n };\n return {\n rail: {\n workspaces: options.workspaces ?? defaultRailWorkspaces(),\n remote: options.remote ?? { status: 'off', deviceCount: 0 },\n pluginContent: null,\n ...(options.addWorkspace === undefined ? {} : { addWorkspace: options.addWorkspace }),\n actions: { ...recorded, ...options.actions },\n },\n actions,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"templateRail.mjs","names":[],"sources":["../../../../../src/web/services/testing/templateRail.ts"],"sourcesContent":["import type {\n WebTemplateRail,\n WebTemplateRailActions,\n WebTemplateRailSession,\n WebTemplateRailWorkspace,\n} from '../../types/template';\n\n/**\n * The rail a template receives, built for a test or story.\n *\n * Two workspaces with sessions that exercise the card's branches (a branch\n * with a dirty star, a profile avatar, a nested child, workflow sessions in\n * each state, a pending setup), plus\n * actions that record what the template asked for. Override any part.\n */\n\nexport interface RecordedRailAction {\n action: keyof WebTemplateRailActions;\n args: readonly unknown[];\n}\n\nexport interface TemplateRailFixture {\n rail: WebTemplateRail;\n /** Every action the template called, in order. */\n readonly actions: readonly RecordedRailAction[];\n}\n\nexport interface TemplateRailOptions {\n workspaces?: readonly WebTemplateRailWorkspace[];\n addWorkspace?: WebTemplateRail['addWorkspace'];\n remote?: WebTemplateRail['remote'];\n homeActive?: boolean;\n actions?: Partial<WebTemplateRailActions>;\n}\n\n/** A tiny transparent PNG, so avatar markup renders an image without a network request. */\nconst AVATAR_URL =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=';\n\nexport function railSession(overrides: Partial<WebTemplateRailSession> & { id: string }): WebTemplateRailSession {\n return {\n name: overrides.id,\n ordinal: 1,\n active: false,\n nested: false,\n status: 'idle · done 2m ago',\n awaitingInput: false,\n restarting: false,\n pendingSetups: [],\n ...overrides,\n };\n}\n\nexport function defaultRailWorkspaces(): WebTemplateRailWorkspace[] {\n return [\n {\n id: 'po',\n name: 'po',\n root: '/Users/dev/workspace/po',\n available: true,\n legacy: false,\n sessions: [\n railSession({\n id: 'rail',\n name: 'rail redesign',\n ordinal: 1,\n active: true,\n status: 'running · 3m',\n git: { branch: 'main', dirty: true },\n profile: { name: 'ponytail', label: 'Ponytail', initials: 'PO', avatarUrl: AVATAR_URL },\n }),\n railSession({\n id: 'rail-worktree',\n name: 'worktree child',\n ordinal: 2,\n nested: true,\n provenance: 'worktree',\n git: { branch: 'feature/rail', dirty: false },\n profile: { name: 'reviewer', label: 'Reviewer', initials: 'RE' },\n pendingSetups: [\n {\n id: 'setup',\n name: 'docs worktree',\n status: 'automatic worktree setup failed',\n failed: true,\n recovery: 'Resolve the Git setup, then retry the authenticated conversation.',\n },\n ],\n }),\n railSession({\n id: 'rail-workflow',\n name: 'release-hardening',\n ordinal: 3,\n nested: true,\n provenance: 'workflow-session',\n status: 'workflow · build › edit token.ts · 4m',\n }),\n railSession({\n id: 'rail-workflow-failed',\n name: 'nightly',\n ordinal: 4,\n nested: true,\n provenance: 'workflow-session',\n status: 'workflow failed · test',\n awaitingInput: true,\n }),\n railSession({\n id: 'rail-workflow-done',\n name: 'hotfix',\n ordinal: 5,\n nested: true,\n provenance: 'workflow-session',\n status: 'stopped · open to wake',\n }),\n ],\n },\n {\n id: 'notes',\n name: 'Notes',\n root: '/Users/dev/.po/workspace/Notes',\n available: true,\n legacy: false,\n sessions: [],\n },\n ];\n}\n\nexport function templateRailStub(options: TemplateRailOptions = {}): TemplateRailFixture {\n const actions: RecordedRailAction[] = [];\n const record =\n <Name extends keyof WebTemplateRailActions>(action: Name, result?: unknown) =>\n (...args: unknown[]) => {\n actions.push({ action, args });\n return result;\n };\n const recorded: WebTemplateRailActions = {\n openSession: record('openSession'),\n renameSession: record('renameSession'),\n setSessionGroups: record(\n 'setSessionGroups',\n Promise.resolve(undefined),\n ) as WebTemplateRailActions['setSessionGroups'],\n renameGroup: record('renameGroup', Promise.resolve(undefined)) as WebTemplateRailActions['renameGroup'],\n deleteGroup: record('deleteGroup', Promise.resolve(undefined)) as WebTemplateRailActions['deleteGroup'],\n restartSession: record('restartSession'),\n removeSession: record('removeSession', Promise.resolve(undefined)) as WebTemplateRailActions['removeSession'],\n resumeSession: record('resumeSession'),\n createSession: record('createSession'),\n resumeInWorkspace: record('resumeInWorkspace'),\n openWorkspaceSettings: record('openWorkspaceSettings'),\n deleteWorkspace: record('deleteWorkspace', Promise.resolve(undefined)) as WebTemplateRailActions['deleteWorkspace'],\n openAddWorkspace: record('openAddWorkspace'),\n closeAddWorkspace: record('closeAddWorkspace'),\n addWorkspace: record('addWorkspace', Promise.resolve(undefined)) as WebTemplateRailActions['addWorkspace'],\n discoverWorkspaces: record(\n 'discoverWorkspaces',\n Promise.resolve({ unsupported: true }),\n ) as WebTemplateRailActions['discoverWorkspaces'],\n addDeclaredWorkspaces: record(\n 'addDeclaredWorkspaces',\n Promise.resolve({ results: [] }),\n ) as WebTemplateRailActions['addDeclaredWorkspaces'],\n searchDirectories: record(\n 'searchDirectories',\n Promise.resolve(['/Users/dev/workspace/po', '/Users/dev/workspace/docs']),\n ) as WebTemplateRailActions['searchDirectories'],\n listDirectory: record(\n 'listDirectory',\n Promise.resolve({\n path: '/Users/dev',\n parent: '/Users',\n directories: ['/Users/dev/workspace', '/Users/dev/notes'],\n }),\n ) as WebTemplateRailActions['listDirectory'],\n removePendingSetup: record(\n 'removePendingSetup',\n Promise.resolve(undefined),\n ) as WebTemplateRailActions['removePendingSetup'],\n openHome: record('openHome'),\n openSettings: record('openSettings'),\n openRemoteAccess: record('openRemoteAccess'),\n turnRemoteAccessOff: record('turnRemoteAccessOff'),\n renderSessionMenuItems: () => null,\n };\n return {\n rail: {\n workspaces: options.workspaces ?? defaultRailWorkspaces(),\n remote: options.remote ?? { status: 'off', deviceCount: 0 },\n pluginContent: null,\n homeActive: options.homeActive ?? false,\n ...(options.addWorkspace === undefined ? {} : { addWorkspace: options.addWorkspace }),\n actions: { ...recorded, ...options.actions },\n },\n actions,\n };\n}\n"],"mappings":"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"}
@@ -138,6 +138,8 @@ export interface WebTemplateRailActions {
138
138
  error: string;
139
139
  }>;
140
140
  removePendingSetup: (sessionId: string, setupId: string) => WebTemplateRailResult;
141
+ /** Opens the Home screen at `/`, where plugins' `home-apps` cards live. */
142
+ openHome: () => void;
141
143
  openSettings: () => void;
142
144
  openRemoteAccess: () => void;
143
145
  turnRemoteAccessOff: () => void;
@@ -156,6 +158,8 @@ export interface WebTemplateRail {
156
158
  };
157
159
  /** Plugin fills for the rail region. */
158
160
  pluginContent: ReactNode;
161
+ /** True while the Home screen is shown, so the rail can mark its Home row. */
162
+ homeActive: boolean;
159
163
  /**
160
164
  * Present while the add-workspace dialog is open. Render it at the layout root,
161
165
  * never inside a drawer that can unmount while closed.
@@ -1 +1 @@
1
- {"version":3,"file":"template.d.mts","names":[],"sources":["../../../../src/web/types/template.ts"],"mappings":";;;iBAGiB;EACf;EACA;;;iBAIe;EACf;EACA;;EAEA;EACA;;EAEA;;;iBAIe;EACf;EACA;;EAEA;EACA;;EAEA;;EAEA;;EAEA;;;;;;EAMA;IAAU;IAAe;;EACzB;EACA;;;;;EAKA;;EAEA;EACA;IAAQ;IAAgB;;;EAExB;EACA;IACE;;IAEA;IACA;;IAEA;;EAEF,wBAAwB;;iBAGT;EACf;EACA;EACA;EACA;;EAEA;EACA,mBAAmB;;;YAIT,wBAAwB;EAAU;;iBAE7B;EACf;EACA;EACA;;iBAGe;EACf;EACA;EACA;;YAGU;EACN;EAAc,uBAAuB;;EACrC;;EACA;;iBAEW;EACf;EACA;EACA;;;iBAIe;EACf,cAAc;EACd,gBAAgB,mBAAmB;;EAEnC,mBAAmB,mBAAmB,8BAA8B;;EAEpE,cAAc,cAAc,eAAe;;EAE3C,cAAc,iBAAiB;EAC/B,iBAAiB;EACjB,gBAAgB,sBAAsB;;EAEtC,gBAAgB;;EAEhB,gBAAgB;EAChB,oBAAoB;EACpB,wBAAwB;EACxB,kBAAkB,wBAAwB;EAC1C;EACA;;EAEA,eAAe;IAAS;IAAc;IAAe;QAA4B;EACjF,sBAAsB,iBAAiB,QAAQ;EAC/C,yBAAyB;IAAS;IAAc;QAA+B;IAC7E,kBAAkB;;EAEpB,oBAAoB,kBAAkB;;EAEtC,gBAAgB,kBAAkB,QAAQ;IAAoC;;EAC9E,qBAAqB,mBAAmB,oBAAoB;EAC5D;EACA;EACA;;EAEA,yBAAyB,sBAAsB;;;iBAIhC;;EAEf,qBAAqB;EACrB;IAAU;IAA8C;IAAe;IAAqB;;;EAE5F,eAAe;;;;;EAKf;IAAiB;;;EAEjB,YAAY,YAAY;EACxB,SAAS;;;iBAIM;EACf;EACA;EACA;EACA;EACA,KAAK"}
1
+ {"version":3,"file":"template.d.mts","names":[],"sources":["../../../../src/web/types/template.ts"],"mappings":";;;iBAGiB;EACf;EACA;;;iBAIe;EACf;EACA;;EAEA;EACA;;EAEA;;;iBAIe;EACf;EACA;;EAEA;EACA;;EAEA;;EAEA;;EAEA;;;;;;EAMA;IAAU;IAAe;;EACzB;EACA;;;;;EAKA;;EAEA;EACA;IAAQ;IAAgB;;;EAExB;EACA;IACE;;IAEA;IACA;;IAEA;;EAEF,wBAAwB;;iBAGT;EACf;EACA;EACA;EACA;;EAEA;EACA,mBAAmB;;;YAIT,wBAAwB;EAAU;;iBAE7B;EACf;EACA;EACA;;iBAGe;EACf;EACA;EACA;;YAGU;EACN;EAAc,uBAAuB;;EACrC;;EACA;;iBAEW;EACf;EACA;EACA;;;iBAIe;EACf,cAAc;EACd,gBAAgB,mBAAmB;;EAEnC,mBAAmB,mBAAmB,8BAA8B;;EAEpE,cAAc,cAAc,eAAe;;EAE3C,cAAc,iBAAiB;EAC/B,iBAAiB;EACjB,gBAAgB,sBAAsB;;EAEtC,gBAAgB;;EAEhB,gBAAgB;EAChB,oBAAoB;EACpB,wBAAwB;EACxB,kBAAkB,wBAAwB;EAC1C;EACA;;EAEA,eAAe;IAAS;IAAc;IAAe;QAA4B;EACjF,sBAAsB,iBAAiB,QAAQ;EAC/C,yBAAyB;IAAS;IAAc;QAA+B;IAC7E,kBAAkB;;EAEpB,oBAAoB,kBAAkB;;EAEtC,gBAAgB,kBAAkB,QAAQ;IAAoC;;EAC9E,qBAAqB,mBAAmB,oBAAoB;;EAE5D;EACA;EACA;EACA;;EAEA,yBAAyB,sBAAsB;;;iBAIhC;;EAEf,qBAAqB;EACrB;IAAU;IAA8C;IAAe;IAAqB;;;EAE5F,eAAe;;EAEf;;;;;EAKA;IAAiB;;;EAEjB,YAAY,YAAY;EACxB,SAAS;;;iBAIM;EACf;EACA;EACA;EACA;EACA,KAAK"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agimon-ai/po-core",
3
- "version": "0.0.0-alpha.64",
3
+ "version": "0.0.0-alpha.65",
4
4
  "description": "Po runtime systems and reusable core services.",
5
5
  "keywords": [
6
6
  "ai",
@@ -559,8 +559,8 @@
559
559
  "registry": "https://registry.npmjs.org/"
560
560
  },
561
561
  "dependencies": {
562
- "@agimon-ai/po-logsink": "0.0.1-alpha.46",
563
- "@agimon-ai/po-web-security": "0.0.0-alpha.64",
562
+ "@agimon-ai/po-logsink": "0.0.1-alpha.47",
563
+ "@agimon-ai/po-web-security": "0.0.0-alpha.65",
564
564
  "@deepseek-ai/cordis": "4.0.5",
565
565
  "@earendil-works/chord": "1.4.0",
566
566
  "@earendil-works/pi-agent-core": "1.4.0",
@@ -584,7 +584,7 @@
584
584
  "yaml": "2.9.1"
585
585
  },
586
586
  "devDependencies": {
587
- "@agimon-ai/vibe-lint-plugin-po-core": "0.0.0-alpha.64",
587
+ "@agimon-ai/vibe-lint-plugin-po-core": "0.0.0-alpha.65",
588
588
  "@apidevtools/swagger-parser": "^13.1.0",
589
589
  "@asyncapi/parser": "^3.6.4",
590
590
  "@earendil-works/pi-ai": "1.4.0",